تساعدك I18N-Tasks في العثور على الترجمات المفقودة وغير المستخدمة وإدارتها.
يحلل هذه الأحجار الكريمة رمزًا ثابتًا للاستخدامات الرئيسية ، مثل I18n.t('some.key') ، من أجل:
وبالتالي معالجة المشكلتين الرئيسيتين لتصميم GEM I18N:
يمكن استخدام I18N-Tasks مع أي مشروع باستخدام GEM Ruby I18N (الافتراضي في القضبان).
أضف I18N-THKS إلى Gemfile:
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/أو للأفضل:
$ 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 Translatedeepl - Deepl Proyandex - Translate Yandexopenai - 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 --no-strict لهذه المهام استنتاج مفاتيح ديناميكية search.strict t("category.#{category.name}")
إذا كنت ترغب في الاحتفاظ بالترتيب من ملف اللغة الأصلي عند استخدام الإزالة غير المستخدمة ، -k أو --keep-order .
فرز المفاتيح:
$ i18n-tasks normalize فرز المفاتيح ، ونقلها إلى الملفات المعنية على النحو المحدد بواسطة config.write :
$ i18n-tasks normalize -p i18n-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_key يوفر i18n-tasks أيضًا مهام قابلة للتأليف للقراءة والكتابة ومعالجة البيانات المحلية. أمثلة أدناه.
تم تنفيذ add-missing مع قيمة missing ، tree-set-value وبيانات data-merge :
$ i18n-tasks missing -f yaml fr | i18n-tasks tree-set-value ' TRME %{value} ' | i18n-tasks data-merge remove-unused مع unused data-remove (بلا تأكيد):
$ i18n-tasks unused -f yaml | i18n-tasks data-remove قم بإزالة جميع المفاتيح من fr غير موجودة في en . لا en :
$ i18n-tasks missing -t diff -f yaml en | i18n-tasks tree-mv en fr | i18n-tasks data-remove انظر القائمة الكاملة للمهام مع i18n-tasks --help .
يستخدم i18n-tasks ماسح ضوئي AST لملفات .rb و .html.erb ، والماسح الضوئي المستند إلى regexp للملفات الأخرى ، مثل .haml .
تقدم i18n-tasks الدعم للمفاتيح النسبية ، مثل t '.title' .
✔ مفاتيح بالنسبة لمسار الملف يتم استخدامها في (انظر تكوين الجذور النسبية) يتم دعمها.
✔ مفاتيح بالنسبة إلى controller.action_name في وحدات التحكم في Rails يتم دعمها. يتم استخدام أقرب اسم def .
✔ مفاتيح الجمع ، مثل key.{one,many,other,...} مدعوم تمامًا.
✔ مفاتيح مرجعية (مفاتيح مع :symbol ) مدعومة بالكامل. يتم نسخ هذه المفاتيح كما هي في add/translate-missing ، ويمكن النظر إليها بالرجوع إليها أو القيمة في find .
t() وسيطات الكلمات الرئيسية ✔ يتم دعم scope الكلمات الرئيسية بالكامل من قبل الماسح الضوئي AST ، وأيضًا بواسطة الماسح الضوئي REGEXP ولكن فقط عندما تكون الوسيطة الأولى.
✔ يمكن استخدام الوسيطة default لملء الملفات المحلية (AST Scanner فقط).
بشكل افتراضي ، لم يتم التعرف على المفاتيح الديناميكية مثل t "cats.#{cat}.name" . أنا أشجعك على وضع علامة على هذه التلميحات التي تستخدمها I18N.
بدلاً من ذلك ، يمكنك تمكين استنتاج المفتاح الديناميكي عن طريق إعداد search.strict إلى false في التكوين. في هذه الحالة ، سيتم النظر في جميع الأجزاء الديناميكية من المفتاح ، على سبيل المثال ، لن يتم الإبلاغ عن cats.tenderlove.name على أنه غير مستخدم. لاحظ أن قسمًا واحدًا فقط من المفتاح يتم التعامل معه كبطاقة برية لكل سلسلة من الاستيفاء ؛ أي في هذا المثال ، سيتم الإبلاغ عن cats.tenderlove.special.name على أنه غير مستخدم.
لا يتم دعم I18n.localize ، استخدم تلميحات I18N-TASKS. وذلك لأن المفتاح الذي تم إنشاؤه بواسطة 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/الإعدادات متوافقة مع القضبان افتراضيا.
بشكل افتراضي ، يتم تعيين base_locale على en ويتم استنتاج locales من المسارات إلى ملفات البيانات. يمكنك تجاوزها في التكوين.
يدعم محول البيانات الافتراضي ملفات YAML و JSON.
يمكن لـ I18N Tasks إدارة ملفات ترجمة متعددة وقراءة الترجمات من الأحجار الكريمة الأخرى. لمعرفة المزيد ، راجع خيارات data في التكوين. NB: بشكل افتراضي ، تتم قراءة ملفات %{locale}.yml فقط namespace.%{locale}.yml تأكد من التحقق من التكوين.
للكتابة إلى الملفات المحلية ، توفر I18N-TASKs خيارين.
ينظم جهاز توجيه الأنماط مفاتيح بناءً على قائمة بأنماط المفاتيح ، كما في المثال أدناه:
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'
إذا كنت ترغب في إعادة تنظيم I18N-TASKs عن مفاتيحك الحالية باستخدام data.write ، إما تعيين جهاز التوجيه على pattern_router على النحو الوارد أعلاه ، أو تشغيل i18n-tasks normalize -p (إجبار استخدام جهاز التوجيه للأنماط لهذا التشغيل).
يفترض عزل جهاز التوجيه أن كل ملف yaml مستقل ويمكن أن يحتوي على مفاتيح مماثلة.
نتيجةً لذلك ، تتم كتابة الترجمات إلى ملف هدف بديل لكل ملف مصدر (فقط يتم تغيير جزء %{locale} لمطابقة لغة الهدف). وبالتالي ، ليس من الضروري تحديد أي تكوين write (في الواقع ، سيتم تجاهله تمامًا).
يمكن أن يكون هذا مفيدًا على سبيل المثال عند استخدام Sidecars ViewComponent (يعين ViewComponent نطاقًا ضمنيًا لكل ملف Sidecar Yaml ولكن i18n-tasks ليس على دراية بهذا المنطق ، مما يؤدي إلى تصادمات):
app/components/movies_component.en.yml :
en :
title : Movies app/components/games_component.en.yml
en :
title : Gamesهذا الموجه له قيود ، على الرغم من أنه لا يدعم اكتشاف المفاتيح المفقودة من استخدام الكود (لأنه لا يدرك منطق النطاق الضمني).
يتم استخدام بناء جملة خاص مشابه لأنماط ملفات الملفات في جميع أنحاء I18N TASK لمطابقة مفاتيح الترجمة:
| بناء الجملة | وصف |
|---|---|
* | يطابق كل شيء |
: | يطابق مفتاح واحد |
*: | يطابق جزء من مفتاح واحد |
{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 ، يمكنك تنفيذ محول مخصص. إذا كنت قد قمت بتطبيق محول مخصص ، فيرجى مشاركته على الويكي.
يستخدم i18n-tasks ماسح ضوئي AST لملفات .rb و .html.erb ، وماسحة الضوئية 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* .
إذا كان لديك طرق مساعدة تنشئ مفاتيح الترجمة ، مثل طريقة page_title التي تُرجع t '.page_title' ، أو طريقة PatternMapper Spree.t(key) التي تُرجع t "spree.#{key}"
للحالات الأكثر تعقيدًا ، يمكنك تنفيذ ماسح ضوئي مخصص.
انظر ملف التكوين لمعرفة المزيد.
تتطلب i18n-tasks translate-missing تترجم Google Translate API ، احصل عليها على وحدة التحكم في Google API.
حيث يعتمد هذا المفتاح على وحدة التحكم في 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 مفتاح API Yandex ، واحصل عليها في Yandex.
# config/i18n-tasks.yml
translation :
backend : yandex
yandex_api_key : <Yandex API key>أو عبر متغير البيئة:
YANDEX_API_KEY= < Yandex API key > تتطلب i18n-tasks translate-missing مفتاح API Openai ، واحصل عليها في 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 ، واحصل عليه في IBM Watsonx.
# 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_actionsModel.human_attribute_name المكالماتModel.model_name.human المكالمات تمكينه عن طريق إضافة الماسح الضوئي في config/i18n-tasks.yml :
<% I18n :: Tasks . add_scanner (
'I18n::Tasks::Scanners::PrismScanner' ,
only : %w( *.rb )
) %> لتمكين المسح الضوئي فقط وليس أي دعم من القضبان ، يرجى إضافة التكوين ضمن قسم search :
search :
prism_visitor : " ruby " # default "rails" i18n-tasks irb يبدأ جلسة IRB في سياق I18N TASK. اكتب guide لمزيد من المعلومات.
انظر I18N-TASKS Wiki: مهام استيراد وتصدير CSV.
يتم تعريف المهام التي تأتي مع الأحجار الكريمة في LIB/I18N/Command/Command/Order. يمكن إضافة المهام المخصصة بسهولة ، انظر الأمثلة على الويكي.
bundle installbundle exec rspecovercommit --install SKIP=RuboCop git commitOVERCOMMIT_DISABLE=1 git commit