パイプラインの結合
1つのプロジェクトで複数の種類の翻訳(アプリのUI文字列とドキュメント、ドキュメントサイトとルートのREADME、またはドキュメントとSVGイラストなど)が必要な場合は、こちらをお読みください。1種類のコンテンツのみを翻訳する場合は、クイックスタートで十分です。
アプリとそのリポジトリのREADMEは一般的なハイブリッドです。init(ui-markdownテンプレート)またはinit -t <template> --with-readmeで足場を構築し、その後、READMEとMarkdownドキュメントにi18nを追加するに従ってください。このページの後半にある混合設定は、ドキュメントサイトと並んだ同じ考え方です。
このリポジトリはそのような種類のプロジェクトです。ai-i18n-tools.config.jsonは、CLIと翻訳ダッシュボードのUI文字列、およびこのVitePressサイトを1つのsyncで翻訳します。UIブロックはsrc/cli、src/server、src/dashboard-app、およびsrc/apiをカバーし、src/i18n/localesの下にフラットなJSONを書き込みます。VitePressブロックは、docs/とテーマカタログにdocsOutput.style: "vitepress"を使用します。同じファイルは、translated-docs/の下にREADME.md翻訳も書き込みます。サイトの配線: VitePress。
syncが実行するもの
ai-i18n-tools syncは、有効になっているステップをこの順序で実行します。
features.translateUIStringsが有効な場合、extract、次にtranslate-ui。features.translateSVGが有効で、svgブロックが存在する場合、translate-svg。features.translateDocsが有効な場合、または任意のdocs[].docusaurusCatalogDirが設定されている場合、translate-docs。features.translateJsonが有効で、json[]にエントリがある場合、translate-json。
--no-ui、--no-svg、--no-docs、または--no-jsonを含む部分はスキップされます。ドキュメントとjson[]のステップは、--dry-run、-p / --path、--force、--force-update、および--check-cacheを受け入れます。--no-docsが設定されている場合、ドキュメント専用のフラグは無視されます。--no-jsonが設定されていない場合、JSONは同じキャッシュフラグを使用します。
個々のコマンドを手動で連結するよりも、syncを使用することをお勧めします。手動で実行すると、順序、抽出、およびロケールフラグを間違えやすくなります。
UI文字列とドキュメントをまとめて
1つの設定で両方の機能を有効にして、UI文字列とドキュメントを1回のパスで実行します。
UIとドキュメントの設定を統合した例
{
"sourceLocale": "en-GB",
"targetLocales": ["de", "fr", "es", "pt-BR", "ja", "ko", "zh-Hans"],
"features": {
"translateUIStrings": true,
"translateDocs": true,
"translateSVG": false
},
"glossary": {
"userGlossary": "glossary-user.csv"
},
"ui": {
"sourceRoots": ["src/"],
"stringsJson": "src/locales/strings.json",
"flatOutputDir": "src/locales/"
},
"cacheDir": ".translation-cache",
"docs": [
{
"contentPaths": ["docs/"],
"outputDir": "i18n/",
"docsOutput": { "style": "flat" }
}
]
}UIブロックには、デフォルトでドキュメント用の用語集ヒントとしてstrings.jsonカタログが含まれます(uiGlossary)。glossary.userGlossaryは、製品用語のCSVオーバーライドを追加します。用語集を参照してください。
ドキュメントのロケールを減らす
ブロックでdocs[].targetLocalesを使用して、そのブロックのファイルをUIよりも少ないサブセットに翻訳します。有効なドキュメントロケールは、ブロック間の和集合です。
{
"targetLocales": ["de", "fr", "es", "pt-BR", "ja", "ko", "zh-Hans"],
"docs": [
{
"contentPaths": ["docs/"],
"outputDir": "i18n/",
"targetLocales": ["de", "fr", "es"]
}
]
}混合ドキュメント設定
docsに複数のエントリを追加することで、同じ設定で複数のドキュメントパイプラインを結合できます。これは、プロジェクトにDocusaurusサイト(docsOutput.style = "docusaurus")と、docsOutput.style = "flat"を含むリポジトリのREADMEのようなルートレベルのMarkdownファイルがあり、それらがロケール接尾辞付きファイル名で翻訳されるべきである場合の一般的な設定です。
DocusaurusとフラットなREADME設定を組み合わせた例
{
"sourceLocale": "en-GB",
"targetLocales": ["ar", "es", "fr", "de", "pt-BR"],
"features": {
"translateUIStrings": true,
"translateDocs": true
},
"ui": {
"sourceRoots": ["src/"],
"stringsJson": "locales/strings.json",
"flatOutputDir": "public/locales/"
},
"cacheDir": ".translation-cache",
"docs": [
{
"description": "Docusaurus site content (markdown)",
"contentPaths": ["docs-site/docs/"],
"outputDir": "docs-site/i18n",
"docusaurusCatalogDir": "docs-site/i18n/en",
"addFrontmatter": true,
"docsOutput": {
"style": "docusaurus",
"docsRoot": "docs-site/docs"
}
},
{
"description": "Root README with docsOutput.style flat",
"contentPaths": ["README.md"],
"outputDir": "translated-docs",
"addFrontmatter": false,
"docsOutput": {
"style": "flat",
"postProcessing": {
"languageListBlock": {
"start": "<small id=\"lang-list\">",
"end": "</small>",
"separator": " · ",
"label": "local"
}
}
}
}
]
}ai-i18n-tools sync でこれを実行する方法:
- UI文字列は
src/から抽出され、public/locales/に翻訳されます。 - 最初のドキュメントブロックは、
docs-site/docs/からMarkdownをdocs-site/i18n/<locale>/docusaurus-plugin-content-docs/current/(ローカライズされたドキュメントページ)に翻訳します。 docs[].docusaurusCatalogDirが設定され、features.translateDocsが有効な場合、同じブロックはdocs-site/i18n/en/の下にあるDocusaurusシェルJSONを各ターゲットロケールフォルダ(ナビゲーションバー、フッター、テーマ/プラグインカタログ。MDX本文コピーではない)に翻訳します。- 2番目のドキュメントブロックは、
README.mdをtranslated-docs/の下にあるロケール接尾辞付きファイル(docsOutput.style = "flat")に翻訳します。 - すべてのドキュメントブロックは
cacheDirを共有するため、変更されていないセグメントは実行間で再利用され、API 呼び出し回数とコストを削減します。