「ユーザーインターフェイスの翻訳」/ admin/config/regional/translateで翻訳した文字列は、「構成管理」/ admin/config/development/configurationではエクスポートできません。何か不足していますか?
_hook_update_N
_または_drush cim -y
_を使用してこのプロセスを自動化したいと思います。
Drupal 8)で「ユーザーインターフェイス翻訳」を自動的に展開する適切な方法は何ですか?
hook_update_N()
で実行する必要がありますか?mytranslations.po
_ファイルを作成する必要がありますか?locale_translate_batch_import_files()
が使用されているようです。
これは自分で行う必要があります。 @rpayanmは、手動で実行できる場所に答えました。そこでコードを確認し、たとえば、それを再度エクスポートおよびインポートできるようにするdrushコマンドを実装する必要があります。これを自動化することは比較的簡単であり、エクスポートし、他のサーバーと同期して、再度インポートします。
それを支援するプロジェクトのように見えます: Drush言語コマンド 。
デフォルトの翻訳をモジュールに入れることができますが、それらはそのモジュールをインストールするときにのみインポートされます。 hook_update_N()
は1回だけ実行するように設計されているため、実行するたびに新しい関数を作成する必要があります(それでも最初にエクスポートする必要があります)。
サイトA(admin/config/regional/translate/export)で使用される翻訳された文字列をエクスポートし、他のサイトにインポートすることができます(admin/config/regional/translate/import)。
カスタム翻訳を追加するヘルパー関数:
/**
* 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');
}
Drush locale sync からコマンドを実行するスクリプトを記述してこれを行うことも可能であるように見えますが、私はそのモジュールを自分で試したことはありません。
aexl が質問のコメントで言及されているので、 Custom Translations モジュールを使用できます。これで、配置スクリプトにdrush locale-update
を含める必要があります。