งาน I18N ช่วยให้คุณค้นหาและจัดการการแปลที่ขาดหายไปและไม่ได้ใช้
อัญมณีนี้วิเคราะห์รหัสแบบคงที่สำหรับการใช้งานหลักเช่น I18n.t('some.key') เพื่อ:
ดังนั้นการแก้ไขปัญหาหลักสองประการของการออกแบบอัญมณี I18N:
งาน I18N สามารถใช้กับโครงการใด ๆ โดยใช้ Ruby I18N GEM (เริ่มต้นเป็นทางรถไฟ)
เพิ่ม i18n-tasks ไปยัง 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/หรือสำหรับ 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 Pass --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 - 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 เป็นเท็จหรือส่งผ่าน --no-strict บนบรรทัดคำสั่ง
หากคุณต้องการเก็บการสั่งซื้อจากไฟล์ภาษาต้นฉบับเมื่อใช้ remove-unused, pass -k หรือ --keep-order
เรียงลำดับคีย์:
$ i18n-tasks normalize เรียงลำดับคีย์และย้ายไปยังไฟล์ที่เกี่ยวข้องตามที่กำหนดโดย config.write :
$ i18n-tasks normalize -p i18n-tasks mv <pattern> <target> เป็นงานอเนกประสงค์ที่จะย้ายหรือลบคีย์ที่ตรงกับรูปแบบที่กำหนด
การจับคู่โหนดทั้งหมด (Leafs หรือ Subtrees) <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 (SANS การยืนยัน):
$ 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 ในตัวควบคุมรางได้รับการสนับสนุน ใช้ชื่อ def ที่ใกล้ที่สุด
✔คีย์พหูพจน์เช่น key.{one,many,other,...} ได้รับการสนับสนุนอย่างเต็มที่
✔คีย์อ้างอิง (คีย์ที่มี :symbol ) ได้รับการสนับสนุนอย่างเต็มที่ คีย์เหล่านี้ถูกคัดลอกตามที่เป็นอยู่ใน add/translate-missing และสามารถค้นหาได้โดยการอ้างอิงหรือค่าใน find
t() อาร์กิวเมนต์คำหลัก ✔อาร์กิวเมนต์คำหลัก scope ได้รับการสนับสนุนอย่างเต็มที่โดยสแกนเนอร์ AST และโดยสแกนเนอร์ RegeXP แต่เมื่อมันเป็นอาร์กิวเมนต์แรกเท่านั้น
✔อาร์กิวเมนต์ default สามารถใช้ในการเติมไฟล์สถานที่ตั้งล่วงหน้า (สแกนเนอร์ AST เท่านั้น)
โดยค่าเริ่มต้นคีย์แบบไดนามิกเช่น t "cats.#{cat}.name" ไม่ได้รับการยอมรับ ฉันขอแนะนำให้คุณทำเครื่องหมายสิ่งเหล่านี้ด้วยคำแนะนำการใช้งาน i18n-Tasks
อีกทางเลือกหนึ่งคุณสามารถเปิดใช้งานการอนุมานคีย์แบบไดนามิกโดยการตั้งค่า search.strict เป็น false ในการกำหนดค่า ในกรณีนี้ชิ้นส่วนไดนามิกทั้งหมดของคีย์จะถูกนำมาใช้เช่น cats.tenderlove.name จะไม่ถูกรายงานว่าไม่ได้ใช้ โปรดทราบว่ามีเพียงส่วนเดียวของคีย์ที่ถือว่าเป็นสัญลักษณ์แทนสำหรับการแก้ไขสตริงแต่ละครั้ง เช่นในตัวอย่างนี้ cats.tenderlove.special.name จะ ถูกรายงานว่าไม่ได้ใช้
ไม่รองรับ I18n.localize ใช้คำแนะนำ I18N-Tasks-use-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/การตั้งค่าเข้ากันได้กับรางตามค่าเริ่มต้น
โดยค่าเริ่มต้น 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'
หากคุณต้องการให้ 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-TASKS เพื่อจับคู่คีย์การแปล:
| ไวยากรณ์ | คำอธิบาย |
|---|---|
* | ตรงกับทุกสิ่ง |
: | ตรงกับคีย์เดียว |
*: | ตรงกับส่วนหนึ่งของคีย์เดียว |
{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 นอกจากนี้คุณยังสามารถเพิกเฉยต่อคีย์ที่ปรากฏในไฟล์ locale ผ่านการตั้งค่า ignore*
หากคุณมีวิธีการของผู้ช่วยที่สร้างคีย์การแปลเช่นวิธี page_title ที่ส่งคืน t '.page_title' หรือวิธีการ Spree.t(key) ที่ส่งคืน t "spree.#{key}" ใช้ PatternMapper ในตัวเพื่อทำแผนที่เหล่านี้
สำหรับกรณีที่ซับซ้อนมากขึ้นคุณสามารถใช้เครื่องสแกนที่กำหนดเองได้
ดูไฟล์กำหนดค่าเพื่อหาข้อมูลเพิ่มเติม
i18n-tasks translate-missing ต้องใช้คีย์ Google Translate API, รับได้ที่ Google API Console
ที่คีย์นี้ขึ้นอยู่กับคอนโซล 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 Key รับที่ 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 call เปิดใช้งานโดยการเพิ่มเครื่องสแกนใน 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-TASKS พิมพ์ guide สำหรับข้อมูลเพิ่มเติม
ดูงาน i18n Wiki: งานนำเข้าและส่งออก CSV
งานที่มาพร้อมกับอัญมณีถูกกำหนดไว้ใน LIB/I18N/TASKS/คำสั่ง/คำสั่ง สามารถเพิ่มงานที่กำหนดเองได้อย่างง่ายดายดูตัวอย่างในวิกิ
bundle installbundle exec rspecovercommit --install SKIP=RuboCop git commitOVERCOMMIT_DISABLE=1 git commit