I18n-Tasks membantu Anda menemukan dan mengelola terjemahan yang hilang dan tidak digunakan.
GEM ini menganalisis kode secara statis untuk penggunaan utama, seperti I18n.t('some.key') , untuk:
Dengan demikian menangani dua masalah utama desain permata i18n:
Tugas i18n dapat digunakan dengan proyek apa pun menggunakan permata Ruby I18N (default di rel).
Tambahkan tugas i18n ke Gemfile:
gem 'i18n-tasks' , '~> 1.0.14' , group : :developmentSalin file konfigurasi default:
$ cp $( i18n-tasks gem-path ) /templates/config/i18n-tasks.yml config/Salin tes RSPEC untuk menguji terjemahan yang hilang dan tidak digunakan sebagai bagian dari suite (opsional):
$ cp $( i18n-tasks gem-path ) /templates/rspec/i18n_spec.rb spec/Atau untuk minitest:
$ cp $( i18n-tasks gem-path ) /templates/minitest/i18n_test.rb test/ Jalankan bundle exec i18n-tasks untuk mendapatkan daftar semua tugas dengan deskripsi pendek.
i18n-tasks health memeriksa jika ada tombol yang hilang atau tidak digunakan, bahwa variabel interpolasi konsisten di seluruh lokal, dan bahwa semua file lokal dinormalisasi (diformat secara otomatis):
$ i18n-tasks healthTambahkan kunci yang hilang dengan placeholder (nilai dasar atau kunci kemanusiaan):
$ i18n-tasks add-missingTugas ini dan lainnya menerima argumen:
$ i18n-tasks add-missing -v ' TRME %{value} ' fr Lulus --help untuk informasi lebih lanjut:
$ 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.Terjemahkan kunci yang hilang menggunakan layanan backend pilihan Anda.
$ i18n-tasks translate-missing
# accepts backend, from and locales options
$ i18n-tasks translate-missing --from=base es fr --backend=googleBackend yang tersedia:
google - Google Translatedeepl - Deept Proyandex - Yandex Terjemahanopenai - OpenAiwatsonx - Watsonx Lihat di mana kunci digunakan dengan 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 Tugas-tugas ini dapat menyimpulkan kunci dinamis seperti t("category.#{category.name}") Jika Anda mengatur search.strict ke false, atau lulus --no-strict pada baris perintah.
Jika Anda ingin menjaga pemesanan dari file bahasa asli saat menggunakan Remove-Unsue, Pass -k atau --keep-order .
Urutkan Kunci:
$ i18n-tasks normalize Urutkan kunci, dan pindahkan ke file masing -masing sebagaimana didefinisikan oleh config.write :
$ i18n-tasks normalize -p i18n-tasks mv <pattern> <target> adalah tugas yang serba guna untuk memindahkan atau menghapus kunci yang cocok dengan pola yang diberikan.
Semua node (Leafs atau Subtrees) Pencocokan <pattern> digabungkan bersama dan dipindahkan ke <target> .
Ganti nama node (daun atau subtree):
$ i18n-tasks mv user accountPindahkan node:
$ i18n-tasks mv user_alerts user.alertsPindahkan anak -anak satu tingkat ke atas:
$ i18n-tasks mv ' alerts.{:} ' ' 1 'Gabungan ganda node:
$ i18n-tasks mv ' {user,profile} ' accountGabungkan (non-daun) node menjadi orang tua:
$ i18n-tasks mv ' {pages}.{a,b} ' ' 1 ' Hapus tombol dengan menggunakan tugas rm :
$ i18n-tasks rm ' user.{old_profile,old_title} ' another_key i18n-tasks juga menyediakan tugas yang dapat dikomposisi untuk membaca, menulis, dan memanipulasi data lokal. Contoh di bawah ini.
add-missing diimplementasikan dengan nilai missing , tree-set-value dan data-merge :
$ i18n-tasks missing -f yaml fr | i18n-tasks tree-set-value ' TRME %{value} ' | i18n-tasks data-merge remove-unused diimplementasikan dengan unused dan data-remove (sans konfirmasi):
$ i18n-tasks unused -f yaml | i18n-tasks data-remove Hapus semua kunci dari fr yang tidak ada di en . Jangan ganti en :
$ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-mv en fr | i18n-tasks data-remove Lihat daftar lengkap tugas dengan i18n-tasks --help .
i18n-tasks menggunakan AST SCANNER untuk file .rb dan .html.erb , dan pemindai berbasis RegExp untuk file lain, seperti .haml .
i18n-tasks menawarkan dukungan untuk kunci relatif, seperti t '.title' .
✔ Kunci relatif terhadap jalur file yang mereka gunakan (lihat konfigurasi Relatif Roots) didukung.
✔ Kunci relatif terhadap controller.action_name di Rails Controller didukung. Nama def terdekat digunakan.
✔ Kunci jamak, seperti key.{one,many,other,...} didukung sepenuhnya.
✔ Kunci referensi (kunci dengan :symbol ) didukung sepenuhnya. Kunci-kunci ini disalin apa adanya dalam add/translate-missing , dan dapat dicari dengan referensi atau nilai dalam find .
t() argumen kata kunci ✔ Argumen Kata Kunci scope didukung sepenuhnya oleh pemindai AST, dan juga oleh pemindai RegExp tetapi hanya ketika itu adalah argumen pertama.
✔ Argumen default dapat digunakan untuk pra-pengisian file lokal (hanya pemindai AST).
Secara default, tombol dinamis seperti t "cats.#{cat}.name" tidak dikenali. Saya mendorong Anda untuk menandai ini dengan petunjuk i18n-Tasks-digunakan.
Sebagai alternatif, Anda dapat mengaktifkan inferensi kunci dinamis dengan mengatur search.strict . false TO FALSE DI CONFIG. Dalam hal ini, semua bagian dinamis dari kunci akan dipertimbangkan, misalnya cats.tenderlove.name tidak akan dilaporkan tidak digunakan. Perhatikan bahwa hanya satu bagian dari kunci yang diperlakukan sebagai wildcard untuk setiap interpolasi string; yaitu dalam contoh ini, cats.tenderlove.special.name akan dilaporkan tidak digunakan.
I18n.localize tidak didukung, gunakan petunjuk i18n-Tasks-usks. Ini karena kunci yang dihasilkan oleh I18n.localize tergantung pada jenis objek yang dilewati dan dengan demikian tidak dapat disimpulkan secara statis.
Konfigurasi dibaca dari config/i18n-tasks.yml atau config/i18n-tasks.yml.erb . Periksa konfigurasi dengan i18n-tasks config .
Instal file konfigurasi default dengan:
$ cp $( i18n-tasks gem-path ) /templates/config/i18n-tasks.yml config/Pengaturan kompatibel dengan rel secara default.
Secara default, base_locale diatur ke en dan locales disimpulkan dari jalur ke file data. Anda dapat mengganti ini di konfigurasi.
Adaptor data default mendukung file YAML dan JSON.
I18N-Tasks dapat mengelola beberapa file terjemahan dan membaca terjemahan dari permata lain. Untuk mengetahui lebih lanjut, lihat opsi data di konfigurasi. NB: Secara default, hanya %{locale}.yml file yang dibaca, bukan namespace.%{locale}.yml . Pastikan untuk memeriksa konfigurasi.
Untuk menulis ke file lokal i18n-Tasks menyediakan 2 opsi.
Router pola mengatur kunci berdasarkan daftar pola kunci, seperti pada contoh di bawah ini:
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'
Router konservatif menyimpan kunci di tempat yang ditemukan, atau menyimpulkan jalan setapak dari daerah dasar. Jika kuncinya benar -benar baru, router konservatif akan kembali ke perilaku router pola. Router konservatif adalah router default .
data:
router: conservative_router
write:
- ['devise.*', 'config/locales/devise.%{locale}.yml']
- 'config/locales/%{locale}.yml'
Jika Anda ingin memiliki tugas-tugas I18N, ulangi kunci Anda yang ada menggunakan data.write , atur router ke pattern_router seperti di atas, atau jalankan i18n-tasks normalize -p (memaksa penggunaan pola router untuk menjalankan itu).
Mengisolasi router mengasumsikan setiap file YAML independen dan dapat berisi kunci yang serupa.
Akibatnya, terjemahan ditulis ke file target alternatif untuk setiap file sumber (hanya bagian %{locale} diubah untuk mencocokkan lokasi target). Dengan demikian, tidak perlu menentukan konfigurasi write apa pun (pada kenyataannya, itu akan sepenuhnya diabaikan).
Ini dapat berguna misalnya saat menggunakan sidecars viewComponent (ViewComponent memberikan ruang lingkup implisit untuk setiap file sidecar yaml tetapi i18n-tasks tidak mengetahui logika itu, menghasilkan tabrakan):
app/components/movies_component.en.yml :
en :
title : Movies app/components/games_component.en.yml
en :
title : GamesRouter ini memiliki batasan, meskipun: tidak mendukung mendeteksi kunci yang hilang dari penggunaan kode (karena tidak menyadari logika lingkup implisit).
Sintaks khusus yang mirip dengan pola file glob digunakan di seluruh tugas i18n untuk mencocokkan kunci terjemahan:
| sintaksis | keterangan |
|---|---|
* | cocok dengan segalanya |
: | cocok dengan satu kunci |
*: | cocok dengan bagian dari satu kunci |
{a, bc} | cocok dengan set, dapat menggunakan : dan * , kecocokan ditangkap |
Contoh Penggunaan:
$ 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.bodyJika Anda menyimpan data di suatu tempat tetapi di sistem file, misalnya dalam database atau mongoDB, Anda dapat mengimplementasikan adaptor khusus. Jika Anda telah mengimplementasikan adaptor khusus, silakan bagikan di wiki.
I18N-Tasks menggunakan AST SCANNER untuk file .rb dan .html.erb , dan pemindai regexp untuk semua file lainnya. Pemindai baru dapat ditambahkan dengan mudah: silakan merujuk ke contoh ini.
Lihat bagian search di file konfigurasi untuk semua opsi konfigurasi yang tersedia. NB: Secara default, hanya app/ direktori yang dicari.
Tambahkan petunjuk ke analisis statis dengan petunjuk komentar ajaib (baris dimulai dengan (#|/) i18n-tasks-use secara default):
# i18n-tasks-use t('activerecord.models.user') # let i18n-tasks know the key is used
User . model_name . human Anda juga dapat secara eksplisit mengabaikan kunci yang muncul di file lokal melalui pengaturan ignore* .
Jika Anda memiliki metode helper yang menghasilkan kunci terjemahan, seperti metode page_title yang mengembalikan metode t '.page_title' , atau Spree.t(key) yang mengembalikan t "spree.#{key}" , gunakan PatternMapper built-in untuk memetakan ini.
Untuk kasus yang lebih kompleks, Anda dapat menerapkan pemindai khusus.
Lihat file konfigurasi untuk mengetahui lebih lanjut.
i18n-tasks translate-missing membutuhkan kunci API Google Translate, dapatkan di Google API Console.
Di mana kunci ini tergantung pada konsol Google API Anda:
Dalam kedua kasus, Anda mungkin perlu membuat kunci jika tidak ada.
Masukkan kunci di variabel lingkungan GOOGLE_TRANSLATE_API_KEY atau di file konfigurasi.
# config/i18n-tasks.yml
translation :
backend : google
google_translate_api_key : <Google Translate API key>atau melalui variabel lingkungan:
GOOGLE_TRANSLATE_API_KEY= < Google Translate API key > i18n-tasks translate-missing membutuhkan kunci API DEEPL Pro, dapatkan di Deepl. Anda dapat menentukan alias lokal jika Anda hanya menggunakan lokal sederhana secara internal.
# 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-bratau melalui variabel lingkungan:
DEEPL_API_KEY= < DeepL Pro API key >
DEEPL_HOST= < optional >
DEEPL_VERSION= < optional > i18n-tasks translate-missing membutuhkan kunci API Yandex, dapatkan di Yandex.
# config/i18n-tasks.yml
translation :
backend : yandex
yandex_api_key : <Yandex API key>atau melalui variabel lingkungan:
YANDEX_API_KEY= < Yandex API key > i18n-tasks translate-missing membutuhkan kunci API OpenAI, dapatkan di Openai.
# config/i18n-tasks.yml
translation :
backend : openai
openai_api_key : <OpenAI API key>
openai_model : <optional>atau melalui variabel lingkungan:
OPENAI_API_KEY= < OpenAI API key >
OPENAI_MODEL= < optional > i18n-tasks translate-missing membutuhkan proyek Watsonx dan kunci API, dapatkan di IBM Watsonx.
# config/i18n-tasks.yml
translation :
backend : watsonx
watsonx_api_key : <watsonx API key>
watsonx_project_id : <watsonx project id>
watsonx_model : <optional>atau melalui variabel lingkungan:
WATSONX_API_KEY= < watsonx API key >
WATSONX_PROJECT_ID= < watsonx project id >
WATSONX_MODEL= < optional > Ada fitur eksperimental untuk parse rel dengan lebih banyak konteks. i18n-tasks akan mendukung:
before_actionsModel.human_attribute_name panggilanModel.model_name.human panggilan Mengaktifkannya dengan menambahkan pemindai di config/i18n-tasks.yml Anda:
<% I18n :: Tasks . add_scanner (
'I18n::Tasks::Scanners::PrismScanner' ,
only : %w( *.rb )
) %> Untuk hanya mengaktifkan pemindaian ruby dan bukan dukungan rel, silakan tambahkan konfigurasi di bawah bagian search :
search :
prism_visitor : " ruby " # default "rails" i18n-tasks irb memulai sesi IRB dalam konteks i18n-Tasks. Ketik guide untuk informasi lebih lanjut.
Lihat Tugas I18N Wiki: Tugas Impor dan Ekspor CSV.
Tugas yang datang dengan permata didefinisikan dalam lib/i18n/tugas/perintah/perintah. Tugas khusus dapat ditambahkan dengan mudah, lihat contoh di wiki.
bundle installbundle exec rspecovercommit --install SKIP=RuboCop git commitOVERCOMMIT_DISABLE=1 git commit