Drupal 8 更新自定义模块的 language.po 文件

Posted

技术标签:

【中文标题】Drupal 8 更新自定义模块的 language.po 文件【英文标题】:Drupal 8 updating custom module's language.po file 【发布时间】:2021-10-13 07:22:45 【问题描述】:

我对 Drupal 模块开发相当陌生,并且面临使用 update.php 过程自动更新 .po 文件翻译的问题。

目前有一个用于翻译的自定义模块。

自定义的模块info.yml实现如下(翻译设置):

'interface translation project': custom_module
'interface translation server pattern': modules/custom/custom_module/translations/%language.po

.po文件位于指定目录。

我必须在下面的登录表单中添加一些新的 t()

class EntryGlobalLogin extends FormEntryAbstract 
...

 /**
  * @inheritdoc
  */
 public function buildForm(array $form, FormStateInterface $form_state) 
   ... 
   // legend explaining that fields containing * are required
   $form['legend'] = [
     '#type' => 'html_tag',
     '#tag' => 'p',
     '#value' => $this->t('* This field is required.'),
     '#attributes' => ['class' => ['form-legend']],
   ];
   ...
   return $form;
  
 

当我通过手动导入新的 .po 文件时

[weburl]/de/admin/config/regional/translate/import 

上述值已正确翻译,因此 .po 文件没有错误。

但是,我找不到使用 update.php 过程自动更新已更新 .po 文件的翻译的方法。

正如在其他地方找到的那样,我将以下内容添加到 .module 文件的 HOOK_update_N 挂钩中

function custom_module_update_8049() 

  ...

  // add new translations via de.po update file
  Drupal::moduleHandler()->loadInclude('locale', 'compare.inc');
  locale_translation_check_projects_local(['custom_module']);

update.php 过程运行时没有错误,并且引用的更新在挂起的更新中被提及,最终执行时没有更新所需的翻译。

因此我的问题是:如何以编程方式更新已更改 .po 文件的翻译(在 HOOK_update_N 挂钩内)?

这可能吗,或者这种更改只能手动运行一些 drush 命令或在管理站点中导入 .po 文件?

提前致谢。

Drupal 版本 8.9.17

最好的问候, 帕特里克

【问题讨论】:

【参考方案1】:

由于我对 .po 文件的更改范围较小,因此我设法通过 hook_update_N 实现了翻译,如下所示: https://drupal.stackexchange.com/a/220608.

因此,在将 custom_module_add_translation 添加到 .module 文件后,编码解决方案如下所示

function custom_module_update_8049() 

  ...

  // Update new translations.
  custom_module_add_translation("* This field is required.", "* Dieses Feld muss ausgefüllt werden.", "de");

【讨论】:

以上是关于Drupal 8 更新自定义模块的 language.po 文件的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 8 自定义模块未显示在块布局中

Drupal 8 自定义模块“找不到主题挂钩”

Drupal 8添加javascript并使用自定义模块在钩子中传递数据

drupal 8 ——自定义权限

当我将Drupal 7更新为Drupal 8时,我的模块会发生什么?

自定义模块:未捕获类型错误:未定义不是函数