如何部署用户界面翻译?


12

我在“用户界面翻译” / admin / config / regional / translate上翻译的字符串无法通过“配置管理” / admin / config / development / configuration导出。我想念什么吗?

我想使用hook_update_N或自动执行此过程drush cim -y

在Drupal 8中自动部署“用户界面转换”的正确方法是什么?

  1. 我应该在里面做hook_update_N()吗?
  2. 我应该mytranslations.po在language文件夹中创建一些自定义文件吗?

我看到有locale_translate_batch_import_files()可能被使用。


你最终做了什么?
Boy Baukema '16

@RelaXNow,我尚未实现解决方案。AFAICS用户界面翻译的导入/导出尚未自动化。我打算和孩子一起去hook_update_N。看看@Berdir的建议。
milkovsky

您是否知道新的Drupal控制台及其命令translation:sync?不幸的是,我找不到有关此命令的任何详细信息,但也许它可以满足您的需求。
菲利普·迈克尔

1
我为此提供了一个模块:drupal.org/project/customtranslations玩得开心。
geek-merlin'4

在我们的案例中,我们对仅在Drush上运行的Potx(github.com/kgaut/drupal-potx)进行了测试。为了轻松实现此目的,我们制作了一个.sh文件,该文件正在执行drush命令,以将翻译文件放入每种模块和每种语言的模块/自定义/翻译中。然后将这些文件添加到项目的gitlab存储库中,并可以在部署过程中轻松将其导入生产中…
Promo

Answers:


6

你必须自己做。@rpayanm回答了可以手动执行的操作,您需要查看其中的代码,例如,实施允许您再次导出和导入它的drush命令。自动化相对容易,然后导出,将其同步到其他服务器,然后再次导入。

看起来像一个可以帮助解决这个问题的项目:Drush Language Commands

您可以将默认翻译放入模块中,但是只有在安装该模块时才导入这些默认翻译。hook_update_N()该工具只能运行一次,因此您每次需要编写一个新函数(并且仍然需要先导出它)。


3
drupal.org/project/drush_language现在具有D8(dev)版本。
雨果

1
您可以检查从导入翻译的形式/admin/config/regional/translate/importcore/modules/locale/src/Form/ImportForm.php
rpayanm


4

帮助程序功能以添加自定义翻译:

/**
 * Helper to manually add a single translation string.
 *
 * @param string $source_string
 *   Source string.
 * @param string $langcode
 *   The langcode.
 * @param string $translated_string
 *   Translated string.
 */
function MYMODULE_add_translation($source_string, $langcode, $translated_string) {
  // Find existing source string.
  $storage = \Drupal::service('locale.storage');
  $string = $storage->findString(['source' => $source_string]);
  if (is_null($string)) {
    $string = new SourceString();
    $string->setString($source_string);
    $string->setStorage($storage);
    $string->save();
  }
  // Create translation. If one already exists, it will be replaced.
  $translation = $storage->createTranslation([
    'lid' => $string->lid,
    'language' => $langcode,
    'translation' => $translated_string,
  ]);
  $translation->save();
}

在更新挂钩中的用法:

/**
 * Add translations.
 */
function MYMODULE_update_8002() {
  MYMODULE_add_translation('Adjust', 'de', 'Anpassen');
}

4

您可以导出站点A使用的已转换字符串(admin / config / regional / translate / export),然后将其导入另一个站点(admin / config / regional / translate / import)。


1
谢谢。我知道这个。但这不是自动部署。我想使用hook_update_N或自动执行此过程drush cim -y。我将其添加到描述中。
milkovsky

1

看起来我也应该可以通过编写脚本从Drush区域设置同步运行命令来执行此操作,尽管我自己尚未尝试过该模块。


2
请为此使用注释,这并不是真正的答案...
mixerowsky

1
我不确定它是否正确,因此我认为应该将其发布为答案,并让其他人投票赞成或反对。如果您认为它是错误的,请投下反对票。
bdsl

1

正如aexl在问题评论中提到的那样,您可以使用“ 自定义翻译”模块。这样,您只需要将其包含drush locale-update在部署脚本中即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.