i18n-tasks는 누락 및 사용되지 않은 번역을 찾고 관리하는 데 도움이됩니다.
이 GEM은 다음을 위해 I18n.t('some.key') 와 같은 주요 사용법에 대해 정적으로 코드를 분석합니다.
따라서 I18N GEM 디자인의 두 가지 주요 문제를 해결합니다.
I18N- 작업은 Ruby I18N GEM (레일의 기본값)을 사용하여 모든 프로젝트와 함께 사용할 수 있습니다.
보석에 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 -Watsonx 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 이 작업은 search.strict 설정하거나 명령 줄에서 --no-strict 전달하는 경우 t("category.#{category.name}") 와 같은 동적 키를 추론 할 수 있습니다.
remove-unuused, pass -k 또는 --keep-order 사용할 때 원래 언어 파일에서 주문을 유지하려면.
키 정렬 :
$ i18n-tasks normalize Keys를 정렬하고 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 또한 로케일 데이터를 읽고 쓰고 쓰고 조작하기위한 종합 가능한 작업을 제공합니다. 아래 예.
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' 과 같은 상대 키를 지원합니다.
짐에 사용되는 파일 경로에 대한 키 (상대 루트 구성 참조)가 지원됩니다.
✔ controller.action_name 에 대한 키는 레일 컨트롤러의 컨트롤러에 대한 키가 지원됩니다. 가장 가까운 def 이름이 사용됩니다.
key.{one,many,other,...} 완전히 지원됩니다.
✔ 참조 키 (키가있는 키 :symbol 값)가 완전히 지원됩니다. 이 키는 add/translate-missing 에서 AS-로 복사되며 find 의 참조 또는 값으로 찾을 수 있습니다.
t() 키워드 인수 scope 키워드 인수는 AST 스캐너와 RegexP 스캐너에 의해 완전히 지원되지만 첫 번째 인수 일 때만 완전히 지원됩니다.
default 기본 인수를 사용하여 로케일 파일 (AST 스캐너 만 해당)을 미리 채울 수 있습니다.
기본적으로 t "cats.#{cat}.name" 과 같은 동적 키는 인식되지 않습니다. i18n- 작업 사용 힌트로 이것을 표시하는 것이 좋습니다.
또는 구성에서 search.strict false 로 설정하여 동적 키 추론을 활성화 할 수 있습니다. 이 경우 키의 모든 동적 부분이 사용되는 것으로 간주됩니다 (예 : cats.tenderlove.name 사용되지 않는 것으로보고되지 않습니다. 키의 한 부분만이 각 문자열 보간에 대한 와일드 카드로 취급됩니다. 즉,이 예에서는 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/설정은 기본적으로 레일과 호환됩니다.
기본적으로 base_locale en 으로 설정되어 있으며 locales 데이터 파일로의 경로에서 추론됩니다. 구성에서이를 재정의 할 수 있습니다.
기본 데이터 어댑터는 YAML 및 JSON 파일을 지원합니다.
I18n- 작업은 여러 번역 파일을 관리하고 다른 보석에서 번역을 읽을 수 있습니다. 자세한 내용은 구성의 data 옵션을 참조하십시오. NB : 기본적으로 %{locale}.yml namespace.%{locale}.yml 만 읽습니다. 구성을 확인하십시오.
로케일 파일에 글을 쓰기 위해 i18n-tasks는 두 가지 옵션을 제공합니다.
Pattern Router는 아래 예제에서와 같이 키 패턴 목록을 기반으로 키를 구성합니다.
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- 작업이 data.write 사용하여 기존 키를 재구성하려면 라우터를 위와 같이 pattern_router 로 설정하거나 i18n-tasks normalize -p (해당 실행에 패턴 라우터 사용을 강요).
격리 라우터는 각 YAML 파일이 독립적이며 유사한 키를 포함 할 수 있다고 가정합니다.
결과적으로 변환은 각 소스 파일의 대체 대상 파일로 기록됩니다 ( %{locale} 부분 만 대상 로케일과 일치하도록 변경됨). 따라서 write 구성을 지정할 필요는 없습니다 (실제로는 완전히 무시됩니다).
예를 들어 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 작업에 걸쳐 번역 키와 일치합니다.
| 통사론 | 설명 |
|---|---|
* | 모든 것을 일치시킵니다 |
: | 단일 키와 일치합니다 |
*: | 단일 키의 일부와 일치합니다 |
{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는 .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' 또는 Spree.t(key) 메소드를 반환하는 page_title 메소드와 같이 번역 키를 생성하는 도우미 메소드가있는 경우 t "spree.#{key}" 반환하는 (Key) 메소드를 사용하여 내장 PatternMapper 를 사용하여이를 맵핑하십시오.
보다 복잡한 경우에는 사용자 정의 스캐너를 구현할 수 있습니다.
자세한 내용은 구성 파일을 참조하십시오.
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 키가 필요합니다. 내부적으로 간단한 로케일 만 사용하는 경우 별명 로케일을 지정할 수 있습니다.
# 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 키가 필요합니다. 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_actions 에서 호출되었습니다Model.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 I18N- 작업 컨텍스트에서 IRB 세션을 시작합니다. 자세한 내용은 guide 입력하십시오.
i18n-tasks wiki : CSV 가져 오기 및 내보내기 작업을 참조하십시오.
보석과 함께 제공되는 작업은 LIB/I18N/작업/명령/명령으로 정의됩니다. 사용자 정의 작업을 쉽게 추가 할 수 있습니다. 위키의 예제를 참조하십시오.
bundle install 사용하여 종속성을 설치하십시오bundle exec rspec 사용하여 테스트를 실행합니다overcommit --install 실행하여 Overcommit을 설치하십시오 SKIP=RuboCop git commitOVERCOMMIT_DISABLE=1 git commit