I18N-Tasks helfen Ihnen, fehlende und nicht verwendete Übersetzungen zu finden und zu verwalten.
Dieser GEM analysiert den Code statisch auf wichtige Verwendungen wie I18n.t('some.key') , um:
Dadurch wird die beiden Hauptprobleme des I18N -Gem -Designs angesprochen:
I18N-Tasks können mit jedem Projekt mit dem Ruby I18N-Gem (Standard in Schienen) verwendet werden.
Fügen Sie der GemFile i18n-Tasks hinzu:
gem 'i18n-tasks' , '~> 1.0.14' , group : :developmentKopieren Sie die Standardkonfigurationsdatei:
$ cp $( i18n-tasks gem-path ) /templates/config/i18n-tasks.yml config/Kopieren Sie den RSPEC -Test, um fehlende und nicht verwendete Übersetzungen als Teil der Suite (optional) zu testen:
$ cp $( i18n-tasks gem-path ) /templates/rspec/i18n_spec.rb spec/Oder für Minitest:
$ cp $( i18n-tasks gem-path ) /templates/minitest/i18n_test.rb test/ Führen Sie bundle exec i18n-tasks aus, um die Liste aller Aufgaben mit kurzen Beschreibungen zu erhalten.
i18n-tasks health Checks Wenn Schlüsseln fehlt oder nicht verwendet werden, dass Interpolationsvariablen über lokale konsistent sind und dass alle Gebietsschemasdateien normalisiert werden (automatisch formatiert):
$ i18n-tasks healthFügen Sie fehlende Schlüssel mit Platzhaltern hinzu (Basiswert oder humanisierter Schlüssel):
$ i18n-tasks add-missingDiese und andere Aufgaben akzeptieren Argumente:
$ i18n-tasks add-missing -v ' TRME %{value} ' fr Pass --help für weitere Informationen:
$ 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.Übersetzen Sie fehlende Schlüssel mit einem Backend -Service Ihrer Wahl.
$ i18n-tasks translate-missing
# accepts backend, from and locales options
$ i18n-tasks translate-missing --from=base es fr --backend=googleVerfügbare Backends:
google - Google Translatedeepl - Deeptl Proyandex - yandex übersetzenopenai - Openaiwatsonx - Watsonx Sehen Sie, wo die Tasten mit 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 Diese Aufgaben können dynamische Schlüssel wie t("category.#{category.name}") abschließen, wenn Sie search.strict auf die Befehlszeile festlegen oder übergeben --no-strict .
Wenn Sie die Bestellung bei der Originalsprachendatei bei Verwendung von Entfernung nicht ausführen möchten, geben Sie -k oder --keep-order .
Sortieren Sie die Schlüssel:
$ i18n-tasks normalize Sortieren Sie die Schlüssel und verschieben Sie sie in die jeweiligen Dateien, wie sie von config.write definiert sind:
$ i18n-tasks normalize -p i18n-tasks mv <pattern> <target> ist eine vielseitige Aufgabe, Tasten zu verschieben oder zu löschen, die dem angegebenen Muster entsprechen.
Alle Knoten (Leafs oder Subtrees), die <pattern> übereinstimmen, werden zusammengeführt und zu <target> verschoben.
Benennen Sie einen Knoten um (Blatt oder Subtree):
$ i18n-tasks mv user accountBewegen Sie einen Knoten:
$ i18n-tasks mv user_alerts user.alertsBewegen Sie die Kinder eine Ebene nach oben:
$ i18n-tasks mv ' alerts.{:} ' ' 1 'Merge-move Mehrere Knoten:
$ i18n-tasks mv ' {user,profile} ' accountZusammenführen (nicht-blatt) Knoten in Eltern:
$ i18n-tasks mv ' {pages}.{a,b} ' ' 1 ' Löschen Sie die Tasten mit der rm -Aufgabe:
$ i18n-tasks rm ' user.{old_profile,old_title} ' another_key i18n-tasks bietet auch komponierbare Aufgaben zum Lesen, Schreiben und Manipulieren von Gebietsschemadaten. Beispiele unten.
add-missing implementiert mit missing , tree-set-value und data-merge :
$ i18n-tasks missing -f yaml fr | i18n-tasks tree-set-value ' TRME %{value} ' | i18n-tasks data-merge mit unused und data-remove implementierte remove-unused (ohne die Bestätigung) implementiert:
$ i18n-tasks unused -f yaml | i18n-tasks data-remove Entfernen Sie alle Schlüssel von fr , die in en nicht existieren. Ändern Sie NICHT en :
$ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-mv en fr | i18n-tasks data-remove Siehe die vollständige Liste der Aufgaben mit i18n-tasks --help .
i18n-tasks verwendet einen AST-Scanner für .rb und .html.erb Dateien sowie einen Regexp-basierten Scanner für andere Dateien wie .haml .
i18n-tasks bietet Unterstützung für relative Schlüssel wie t '.title' .
✔ Tasten relativ zum Dateipfad, in dem sie verwendet werden (siehe Konfiguration der relativen Wurzeln), werden unterstützt.
✔ Tasten relativ zum controller.action_name in Rails Controllern werden unterstützt. Der engste def Name wird verwendet.
✔ Pluralschlüssel wie key.{one,many,other,...} werden vollständig unterstützt.
✔ Referenzschlüssel (Schlüssel mit :symbol Symbolwerten) werden vollständig unterstützt. Diese Schlüssel werden als IS in add/translate-missing kopiert und können durch Referenz oder Wert in find nachschlagen.
t() Keyword -Argumente ✔ Das Keyword -Argument scope wird durch den AST -Scanner und auch vom Regexp -Scanner vollständig unterstützt, aber nur dann, wenn es das erste Argument ist.
✔ default können verwendet werden, um Gebietsschema-Dateien vorzuführen (nur AST-Scanner).
Standardmäßig werden dynamische Schlüssel wie t "cats.#{cat}.name" nicht erkannt. Ich ermutige Sie, diese mit I18N-Tasks-Use-Tipps zu markieren.
Alternativ können Sie die dynamische Schlüsselinferenz aktivieren false indem Sie search.strict in der Konfiguration einstellen. In diesem Fall werden alle dynamischen Teile des Schlüssels als verwendet angesehen, z. B. cats.tenderlove.name würde nicht als nicht verwendet gemeldet. Beachten Sie, dass nur ein Abschnitt des Schlüssels als Wildcard für jede Saiten -Interpolation behandelt wird. dh in diesem Beispiel wird cats.tenderlove.special.name als ungenutzt gemeldet.
I18n.localize wird nicht unterstützt. Verwenden Sie I18N-Tasks-Use-Hinweise. Dies liegt daran, dass der von I18n.localize generierte Schlüssel vom Typ des in übergebenen Objekts abhängt und daher nicht statisch abgeleitet werden kann.
Die Konfiguration wird aus config/i18n-tasks.yml oder config/i18n-tasks.yml.erb gelesen. Überprüfen Sie die Konfiguration mit i18n-tasks config .
Installieren Sie die Standardkonfigurationsdatei mit:
$ cp $( i18n-tasks gem-path ) /templates/config/i18n-tasks.yml config/Die Einstellungen sind standardmäßig mit Rails kompatibel.
Standardmäßig wird base_locale auf en eingestellt und locales werden von den Pfaden zu Datendateien abgeleitet. Sie können diese in der Konfiguration überschreiben.
Der Standarddatenadapter unterstützt YAML- und JSON -Dateien.
I18N-Tasks können mehrere Übersetzungsdateien verwalten und Übersetzungen aus anderen Edelsteinen lesen. Weitere Informationen finden Sie in den data in der Konfiguration. NB: Standardmäßig werden nur %{locale}.yml -Dateien gelesen, nicht namespace.%{locale}.yml . Überprüfen Sie die Konfiguration.
Für das Schreiben in Gebietsschemas bietet i18n-Tasks 2 Optionen.
Muster Router organisiert Schlüssel basierend auf einer Liste der Schlüsselmuster, wie im folgenden Beispiel:
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'
Der konservative Router hält die Schlüssel dort, wo sie gefunden werden, oder färbt den Weg vom Basisgebiet. Wenn der Schlüssel völlig neu ist, fällt der konservative Router zurück in das Muster -Router -Verhalten zurück. Der konservative Router ist der Standardrouter .
data:
router: conservative_router
write:
- ['devise.*', 'config/locales/devise.%{locale}.yml']
- 'config/locales/%{locale}.yml'
Wenn Sie I18N-Tasks Ihre vorhandenen Tasten mithilfe data.write neu organisieren möchten, stellen Sie den Router entweder auf pattern_router wie oben fest oder führen Sie i18n-tasks normalize -p .
Das Isolieren von Router geht davon aus, dass jede YAML -Datei unabhängig ist und ähnliche Schlüssel enthalten kann.
Infolgedessen werden die Übersetzungen für jede Quelldatei in eine alternative Zieldatei geschrieben (nur der %{locale} wird in das Ziel -Gebietsschema geändert). Daher ist es nicht erforderlich, eine write anzugeben (tatsächlich würde sie vollständig ignoriert).
Dies kann beispielsweise bei der Verwendung von ViewComponent-Sidecars nützlich sein (ViewComponent weist jeder Sidecar YAML-Datei einen impliziten Bereich zu, aber i18n-tasks ist diese Logik nicht bekannt, was zu Kollisionen führt):
app/components/movies_component.en.yml :
en :
title : Movies app/components/games_component.en.yml
en :
title : GamesDieser Router hat jedoch eine Einschränkung: Er unterstützt nicht die Erkennung fehlender Schlüssel aus der Codeverwendung (da es sich nicht der implizite Umfangslogik bewusst ist).
Eine spezielle Syntax ähnelt in den I18N-Tasks, um Übersetzungsschlüssel zu entsprechen:
| Syntax | Beschreibung |
|---|---|
* | passt alles |
: | entspricht einem einzigen Schlüssel |
*: | entspricht dem Teil eines einzelnen Schlüssels |
{a, bc} | Übereinstimmung in Set, kann verwenden : und * , Match wird erfasst |
Beispiel der Nutzung:
$ 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.bodyWenn Sie Daten irgendwo, jedoch im Dateisystem, z. B. in der Datenbank oder in MongoDB, speichern, können Sie einen benutzerdefinierten Adapter implementieren. Wenn Sie einen benutzerdefinierten Adapter implementiert haben, teilen Sie ihn bitte am Wiki mit.
I18N-Tasks verwendet einen AST-Scanner für .rb und .html.erb Dateien sowie einen Regexp-Scanner für alle anderen Dateien. Neue Scanner können leicht hinzugefügt werden: Bitte beachten Sie dieses Beispiel.
In der search in der Konfigurationsdatei finden Sie alle verfügbaren Konfigurationsoptionen. NB: Standardmäßig wird nur das app/ das Verzeichnis durchsucht.
Fügen Sie die statische Analyse mit magischen Kommentaren Hinweisen hinzu (Zeilen, die standardmäßig mit (#|/) i18n-tasks-use beginnen):
# i18n-tasks-use t('activerecord.models.user') # let i18n-tasks know the key is used
User . model_name . human Sie können auch explizit ignorieren, wie in Gebietsschemasdateien über ignore* Einstellungen angezeigt werden.
Spree.t(key) Sie Helfermethoden haben, die t "spree.#{key}" PatternMapper , wie page_title t '.page_title'
Für komplexere Fälle können Sie einen benutzerdefinierten Scanner implementieren.
Siehe die Konfigurationsdatei, um mehr zu erfahren.
i18n-tasks translate-missing erfordert einen Google Translate API-Schlüssel, holen Sie sie bei der Google API-Konsole.
Wo dieser Schlüssel ist, hängt von Ihrer Google API -Konsole ab:
In beiden Fällen müssen Sie möglicherweise den Schlüssel erstellen, wenn es nicht vorhanden ist.
Geben Sie den Schlüssel in die Umgebungsvariable GOOGLE_TRANSLATE_API_KEY oder in die Konfigurationsdatei ein.
# config/i18n-tasks.yml
translation :
backend : google
google_translate_api_key : <Google Translate API key>oder über Umgebungsvariable:
GOOGLE_TRANSLATE_API_KEY= < Google Translate API key > i18n-tasks translate-missing erfordert eine tiefgreifende Pro-API-Schlüssel, um sie bei Deeptl zu erhalten. Sie können Alias -Orte angeben, wenn Sie die einfachen Orte nur intern verwenden.
# 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-broder über Umgebungsvariablen:
DEEPL_API_KEY= < DeepL Pro API key >
DEEPL_HOST= < optional >
DEEPL_VERSION= < optional > i18n-tasks translate-missing erfordert einen Yandex-API-Schlüssel, holen Sie ihn bei Yandex.
# config/i18n-tasks.yml
translation :
backend : yandex
yandex_api_key : <Yandex API key>oder über Umgebungsvariable:
YANDEX_API_KEY= < Yandex API key > i18n-tasks translate-missing erfordert einen OpenAI-API-Schlüssel, erhalten Sie es bei OpenAI.
# config/i18n-tasks.yml
translation :
backend : openai
openai_api_key : <OpenAI API key>
openai_model : <optional>oder über Umgebungsvariable:
OPENAI_API_KEY= < OpenAI API key >
OPENAI_MODEL= < optional > i18n-tasks translate-missing erfordert ein Watsonx-Projekt und einen API-Schlüssel, um es bei IBM Watsonx zu erhalten.
# config/i18n-tasks.yml
translation :
backend : watsonx
watsonx_api_key : <watsonx API key>
watsonx_project_id : <watsonx project id>
watsonx_model : <optional>oder über Umgebungsvariable:
WATSONX_API_KEY= < watsonx API key >
WATSONX_PROJECT_ID= < watsonx project id >
WATSONX_MODEL= < optional > Es gibt ein experimentelles Merkmal, um Schienen mit mehr Kontext zu analysieren. i18n-tasks werden unterstützen:
before_actions aufgerufen wurdenModel.human_attribute_name callsModel.model_name.human calls Aktiviert es, indem der Scanner in Ihre config/i18n-tasks.yml hinzugefügt wird:
<% I18n :: Tasks . add_scanner (
'I18n::Tasks::Scanners::PrismScanner' ,
only : %w( *.rb )
) %> Um das Ruby-Scanning nur und keinen Rails-Support zu aktivieren, fügen Sie bitte die Konfiguration im search hinzu:
search :
prism_visitor : " ruby " # default "rails" i18n-tasks irb startet eine IRB-Sitzung im i18n-Tasks-Kontext. Geben Sie guide für weitere Informationen ein.
Siehe I18N-Tasks Wiki: CSV-Import- und Exportaufgaben.
Aufgaben, die mit dem Edelstein geliefert werden, sind in lib/i18n/tasks/command/commands definiert. Benutzerdefinierte Aufgaben können problemlos hinzugefügt werden. Siehe Beispiele auf dem Wiki.
bundle installbundle exec rspec ausovercommit --install SKIP=RuboCop git commitOVERCOMMIT_DISABLE=1 git commit