web-dev-qa-db-ja.com

ユーザーインターフェイス翻訳を展開するにはどうすればよいですか?

「ユーザーインターフェイスの翻訳」/ admin/config/regional/translateで翻訳した文字列は、「構成管理」/ admin/config/development/configurationではエクスポートできません。何か不足していますか?

_hook_update_N_または_drush cim -y_を使用してこのプロセスを自動化したいと思います。

Drupal 8)で「ユーザーインターフェイス翻訳」を自動的に展開する適切な方法は何ですか?

  1. hook_update_N()で実行する必要がありますか?
  2. 言語フォルダーにカスタム_mytranslations.po_ファイルを作成する必要がありますか?

locale_translate_batch_import_files() が使用されているようです。

12
milkovsky

これは自分で行う必要があります。 @rpayanmは、手動で実行できる場所に答えました。そこでコードを確認し、たとえば、それを再度エクスポートおよびインポートできるようにするdrushコマンドを実装する必要があります。これを自動化することは比較的簡単であり、エクスポートし、他のサーバーと同期して、再度インポートします。

それを支援するプロジェクトのように見えます: Drush言語コマンド

デフォルトの翻訳をモジュールに入れることができますが、それらはそのモジュールをインストールするときにのみインポートされます。 hook_update_N()は1回だけ実行するように設計されているため、実行するたびに新しい関数を作成する必要があります(それでも最初にエクスポートする必要があります)。

6
Berdir

サイトA(admin/config/regional/translate/export)で使用される翻訳された文字列をエクスポートし、他のサイトにインポートすることができます(admin/config/regional/translate/import)。

4
rpayanm

カスタム翻訳を追加するヘル​​パー関数:

/**
 * 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
milkovsky

Drush locale sync からコマンドを実行するスクリプトを記述してこれを行うことも可能であるように見えますが、私はそのモジュールを自分で試したことはありません。

1
bdsl

aexl が質問のコメントで言及されているので、 Custom Translations モジュールを使用できます。これで、配置スクリプトにdrush locale-updateを含める必要があります。

1
bdsl