I18Nタスクは、欠落している翻訳と未使用の翻訳を見つけて管理するのに役立ちます。
このgemはI18n.t('some.key')などの主要な使用法について、コードを静的に分析します。
したがって、I18N GEMデザインの2つの主な問題に対処します。
I18Nタスクは、Ruby I18N GEM(Railsのデフォルト)を使用して、任意のプロジェクトで使用できます。
gemfileにi18nタスクを追加します:
gem 'i18n-tasks' , '~> 1.0.14' , group : :developmentデフォルトの構成ファイルをコピーします。
$ cp $( i18n-tasks gem-path ) /templates/config/i18n-tasks.yml config/RSPECテストをコピーして、スイートの一部として欠落していない翻訳と未使用の翻訳をテストします(オプション):
$ cp $( i18n-tasks gem-path ) /templates/rspec/i18n_spec.rb spec/またはminitestの場合:
$ cp $( i18n-tasks gem-path ) /templates/minitest/i18n_test.rb test/ bundle exec i18n-tasksを実行して、すべてのタスクのリストを短い説明で取得します。
i18n-tasks healthチェックは、キーが欠落しているか使用されていないか、補間変数がロケール全体で一貫しているか、すべてのロケールファイルが正規化されている(自動フォーマット)ということをチェックします。
$ i18n-tasks healthプレースホルダーに欠落しているキーを追加します(基本価値または人間化されたキー):
$ i18n-tasks add-missingこれや他のタスクは議論を受け入れます。
$ i18n-tasks add-missing -v ' TRME %{value} ' frパス--help詳細については:
$ i18n-tasks add-missing --help
Usage: i18n-tasks add-missing [options] [locale ...]
-l, --locales Comma-separated list of locale(s) to process. Default: all. Special: base.
-f, --format Output format: terminal-table, yaml, json, keys, inspect. Default: terminal-table.
-v, --value Value. Interpolates: %{value}, %{human_key}, %{value_or_human_key}, %{key}. Default: %{value_or_human_key}.
-h, --help Display this help message.選択したバックエンドサービスを使用して、欠落しているキーを翻訳します。
$ i18n-tasks translate-missing
# accepts backend, from and locales options
$ i18n-tasks translate-missing --from=base es fr --backend=google利用可能なバックエンド:
google -Google翻訳deepl -Deepl Proyandex -yandex翻訳openai -Openaiwatsonx - ワトソンックスi18n-tasks findでキーが使用されている場所を確認してください。
$ i18n-tasks find common.help
$ i18n-tasks find ' auth.* '
$ i18n-tasks find ' {number,currency}.format.* '$ i18n-tasks unused
$ i18n-tasks remove-unusedこれらのタスクはt("category.#{category.name}")などの動的キーを推測できますsearch.strict falseに設定するか、コマンドラインに--no-strictれます。
remody-unusedを使用しているときに元の言語ファイルから注文を維持する場合は、pass -kまたは--keep-orderします。
キーを並べ替えます:
$ i18n-tasks normalizeキーを並べ替え、 config.writeで定義されているように、それぞれのファイルに移動します。
$ i18n-tasks normalize -pi18n-tasks mv <pattern> <target>は、指定されたパターンに一致するキーを移動または削除するための多用途のタスクです。
すべてのノード(リーフまたはサブツリー)の一致<pattern>はマージされ、 <target>に移動します。
ノードの名前を変更します(リーフまたはサブツリー):
$ i18n-tasks mv user accountノードを移動します:
$ i18n-tasks mv user_alerts user.alerts子供たちを一重に動かす:
$ i18n-tasks mv ' alerts.{:} ' ' 1 'マージ - 複数のノード:
$ i18n-tasks mv ' {user,profile} ' account(葉以外の)ノードを親にマージします。
$ i18n-tasks mv ' {pages}.{a,b} ' ' 1 'rmタスクを使用してキーを削除します。
$ i18n-tasks rm ' user.{old_profile,old_title} ' another_keyi18n-tasksロケールデータの読み取り、書き込み、操作のための複合タスクも提供します。以下の例。
missing 、 tree-set-value 、およびdata-mergeで実装されたadd-missing :
$ i18n-tasks missing -f yaml fr | i18n-tasks tree-set-value ' TRME %{value} ' | i18n-tasks data-merge unusedおよびdata-removeで実装されたremove-unused (確認のサン):
$ i18n-tasks unused -f yaml | i18n-tasks data-remove enに存在しないfrからすべてのキーを削除します。 enを変更しないでください:
$ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-mv en fr | i18n-tasks data-remove i18n-tasks --help 。
i18n-tasks 、 .rbおよび.html.erbファイルにASTスキャナーと、 .hamlなどの他のファイルにRegexpベースのスキャナーを使用します。
i18n-tasks 、 t '.title'などの相対キーをサポートします。
fileで使用されているファイルパス(相対根構成を参照)に関連するキーがサポートされています。
controller.action_nameに関連するキーレールコントローラーのcontrollersがサポートされています。最も近いdef名が使用されています。
key.{one,many,other,...}は完全にサポートされています。
correferion参照キー(キー付きキー:symbol値)は完全にサポートされています。これらのキーは、 add/translate-missingのAS-ISのようにコピーされており、 findの参照または値で調べることができます。
t()キーワード引数cope scopeキーワード引数は、ASTスキャナー、およびそれが最初の引数である場合にのみ、regexpスキャナーによって完全にサポートされています。
defaultデフォルトの引数を使用して、ロケールファイルを事前に入力できます(ASTスキャナーのみ)。
デフォルトでは、 t "cats.#{cat}.name"などの動的キーは認識されていません。これらをi18n-tasks-useのヒントでマークすることをお勧めします。
または、 search.strictを設定にfalseに設定することにより、動的キー推論を有効にすることができます。この場合、キーのすべての動的な部分cats.tenderlove.name使用されると見なされます。キーの1つのセクションのみが、各ストリング補間のワイルドカードとして扱われていることに注意してください。 IEこの例では、 cats.tenderlove.special.name未使用として報告されます。
I18n.localizeサポートされていません。i18n-tasks-useのヒントを使用します。これは、 I18n.localizeによって生成されたキーが、渡されたオブジェクトのタイプに依存するため、静的に推測できないためです。
構成は、 config/i18n-tasks.ymlまたはconfig/i18n-tasks.yml.erbから読み取られます。 i18n-tasks configで構成を検査します。
デフォルトの構成ファイルを次のようにインストールします。
$ cp $( i18n-tasks gem-path ) /templates/config/i18n-tasks.yml config/設定は、デフォルトでRailsと互換性があります。
デフォルトでは、 base_localeがenに設定され、 localesデータファイルへのパスから推測されます。これらを構成でオーバーライドできます。
デフォルトのデータアダプターは、YAMLおよびJSONファイルをサポートします。
I18Nタスクは、複数の翻訳ファイルを管理し、他の宝石から翻訳を読むことができます。詳細については、構成のdataオプションを参照してください。 NB:デフォルトでは、 %{locale}.ymlファイルのみが読み取られ、 namespace.%{locale}.yml 。必ず構成を確認してください。
Localeファイルへの書き込み用i18n-Tasksは2つのオプションを提供します。
パターンルーターは、以下の例のように、キーパターンのリストに基づいてキーを整理します。
data:
router: pattern_router
# a list of {key pattern => file} routes, matched top to bottom
write:
# write models.* and views.* keys to the respective files
- ['{models,views}.*', 'config/locales/1.%{locale}.yml']
# or, write every top-level key namespace to its own file
- ['{:}.*', 'config/locales/1.%{locale}.yml']
# default, sugar for ['*', path]
- 'config/locales/%{locale}.yml'
保守的なルーターは、それらが見つかった場所にキーを保持するか、ベースロケールからパスを誘導します。キーが完全に新しい場合、保守的なルーターはパターンルーターの動作に戻ります。保守的なルーターはデフォルトのルーターです。
data:
router: conservative_router
write:
- ['devise.*', 'config/locales/devise.%{locale}.yml']
- 'config/locales/%{locale}.yml'
data.writeを使用してi18n-tasksが既存のキーを再編成したい場合、routerを上記のようにpattern_routerに設定するか、 i18n-tasks normalize -p (その実行にパターンルーターの使用を強制します)。
分離ルーターは、各YAMLファイルが独立しており、同様のキーを含めることができると仮定します。
その結果、翻訳は各ソースファイルの代替ターゲットファイルに書き込まれます( %{locale}パーツのみがターゲットロケールに一致するように変更されます)。したがって、 write構成を指定する必要はありません(実際、それは完全に無視されます)。
これは、たとえば、ViewComponent Sidecarsを使用する場合に役立ちます(ViewComponentは各SideCar YAMLファイルに暗黙的なスコープを割り当てますが、 i18n-tasksそのロジックを認識しておらず、衝突をもたらします):
app/components/movies_component.en.yml :
en :
title : Movies app/components/games_component.en.yml
en :
title : Gamesただし、このルーターには制限があります。コード使用量から欠落しているキーの検出をサポートしていません(暗黙のスコープロジックを認識していないため)。
ファイルグローブパターンに似た特別な構文は、翻訳キーを一致させるためにi18nタスク全体で使用されます。
| 構文 | 説明 |
|---|---|
* | すべてに一致します |
: | 単一のキーに一致します |
*: | 単一のキーの一部に一致します |
{a, bc} | セットで一致し、使用できます:および* 、マッチがキャプチャされます |
使用例:
$ bundle exec i18n-tasks mv " {:}.contents.{*}_body " " 1.attributes.2.body "
car.contents.name_body ⮕ car.attributes.name.body
car.contents.description_body ⮕ car.attributes.description.body
truck.contents.name_body ⮕ truck.attributes.name.body
truck.contents.description_body ⮕ truck.attributes.description.bodyデータベースまたはMongoDBなどのファイルシステムでデータをどこかに保存すると、カスタムアダプターを実装できます。カスタムアダプターを実装している場合は、Wikiで共有してください。
I18N-Tasksは、 .rbおよび.html.erbファイルにASTスキャナーと、他のすべてのファイルにRegexpスキャナーを使用します。新しいスキャナーを簡単に追加できます。この例を参照してください。
利用可能なすべての構成オプションについては、構成ファイルのsearchセクションを参照してください。 NB:デフォルトでは、 app/ディレクトリのみが検索されます。
魔法のコメントヒントを使用して静的分析にヒントを追加します(デフォルトで(#|/) i18n-tasks-useで始まる行):
# i18n-tasks-use t('activerecord.models.user') # let i18n-tasks know the key is used
User . model_name . humanまた、 ignore*設定を介してロケールファイルに表示されるキーを明示的に無視することもできます。
t '.page_title'を返すpage_titleメソッドなどの翻訳キーを生成するヘルパーメソッドや、 t "spree.#{key}"を返すSpree.t(key)メソッドを持っている場合、組み込みのPatternMapperを使用してこれらをマップします。
より複雑なケースの場合、カスタムスキャナーを実装できます。
詳細については、構成ファイルを参照してください。
i18n-tasks translate-missingには、Google Translate APIキーが必要です。GoogleAPIコンソールで取得します。
このキーがGoogle APIコンソールに依存します:
どちらの場合も、キーが存在しない場合はキーを作成する必要がある場合があります。
キーをGOOGLE_TRANSLATE_API_KEY環境変数または構成ファイルに置きます。
# config/i18n-tasks.yml
translation :
backend : google
google_translate_api_key : <Google Translate API key>または環境変数を介して:
GOOGLE_TRANSLATE_API_KEY= < Google Translate API key >i18n-tasks translate-missingは、deepl pro apiキーが必要で、deeplで取得します。単純なロケールを内部的にのみ使用する場合、エイリアスロケールを指定できます。
# config/i18n-tasks.yml
translation :
backend : deepl
deepl_api_key : <DeepL Pro API key>
deepl_host : <optional>
deepl_version : <optional>
deepl_glossary_ids :
- f28106eb-0e06-489e-82c6-8215d6f95089
- 2c6415be-1852-4f54-9e1b-d800463496b4
deepl_options :
formality : prefer_less
deepl_locale_aliases :
en : en-us
pt : pt-brまたは環境変数を介して:
DEEPL_API_KEY= < DeepL Pro API key >
DEEPL_HOST= < optional >
DEEPL_VERSION= < optional >i18n-tasks translate-missingにはYandex APIキーが必要です。Yandexで取得します。
# config/i18n-tasks.yml
translation :
backend : yandex
yandex_api_key : <Yandex API key>または環境変数を介して:
YANDEX_API_KEY= < Yandex API key >i18n-tasks translate-missingには、Openai APIキーが必要です。Openaiで入手してください。
# config/i18n-tasks.yml
translation :
backend : openai
openai_api_key : <OpenAI API key>
openai_model : <optional>または環境変数を介して:
OPENAI_API_KEY= < OpenAI API key >
OPENAI_MODEL= < optional >i18n-tasks translate-missingには、WatsonxプロジェクトとAPIキーが必要です。IBMWatsonxで入手してください。
# config/i18n-tasks.yml
translation :
backend : watsonx
watsonx_api_key : <watsonx API key>
watsonx_project_id : <watsonx project id>
watsonx_model : <optional>または環境変数を介して:
WATSONX_API_KEY= < watsonx API key >
WATSONX_PROJECT_ID= < watsonx project id >
WATSONX_MODEL= < optional >より多くのコンテキストでレールを解析するための実験的な機能があります。 i18n-tasksはサポートされます:
before_actionsで呼び出されましたModel.human_attribute_name呼び出しModel.model_name.human Calls config/i18n-tasks.ymlにスキャナーを追加して有効にしました。
<% I18n :: Tasks . add_scanner (
'I18n::Tasks::Scanners::PrismScanner' ,
only : %w( *.rb )
) %> Ruby Scanningのみを有効にし、Railsサポートを使用しないようにするには、 searchセクションの下に構成を追加してください。
search :
prism_visitor : " ruby " # default "rails" i18n-tasks irb I18N-TasksコンテキストでIRBセッションを開始します。詳細については、タイプguide 。
i18n-tasks wiki:CSVインポートおよびエクスポートタスクを参照してください。
GEMに付属するタスクは、LIB/I18N/タスク/コマンド/コマンドで定義されます。カスタムタスクは簡単に追加できます。Wikiの例をご覧ください。
bundle installを使用して依存関係をインストールしますbundle exec rspecを使用してテストを実行しますovercommit --install SKIP=RuboCop git commitOVERCOMMIT_DISABLE=1 git commit