# General Translation Knowledge Base: CrowdinからGeneral Translationに移行するにはどうすればよいですか？
URL: https://generaltranslation.com/ja/kb/migrate-from-crowdin.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: リソースファイル、i18nライブラリ、レビュー済みの翻訳はそのまま引き継げます。「Skip untranslated strings」を有効にして翻訳をダウンロードし、CrowdinのGitインテグレーションによる翻訳のプッシュを止めたうえで、最初に npx gt translate を実行する前に npx gt upload でファイルをインポートします。以降はGeneral Translationがビルド時に新規・変更された文字列を翻訳し、その際にはコンテキストグループの用語集が適用されます。
Category: ワークフローツール
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

Crowdinでは原文ファイルとその翻訳、用語集、翻訳メモリが管理され、Gitインテグレーションによって翻訳がプルリクエストとして返されます。General Translationに移行しても、アプリが現在読み込んでいるリソースファイルはそのまま使えます。`gt` CLIがそれらを既存の翻訳ごとインポートし、以降はビルドやCIの中で新規・変更された文字列を翻訳します。i18nライブラリ、キー、ファイル構成は変わりません。テキストをインライン化するのは別の任意のステップです ([react-i18nextからの移行](/kb/migrate-from-react-i18next)または[next-intlからの移行](/kb/migrate-from-next-intl)を参照) 。用語集はコンテキストグループとして移行され、アプリやドキュメント、その他のプロジェクト間で共有できます。

## Crowdin から引き継げるもの

| Crowdin                                           | General Translation                                                                                                                     |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `crowdin.yml` の `files` エントリ                      | `gt.config.json` の `files`(`%locale%` の代わりに `[locale]` を使用)                                                                             |
| 翻訳済みファイル                                          | [`npx gt upload`](/docs/cli/reference/commands/upload) でインポートし、翻訳元が変更されるまで保持されます                                                        |
| 用語集                                               | [コンテキストグループ](/docs/platform/dashboard/guides/defining-context-for-translations)の用語集(CSV からインポート)                                        |
| スタイルガイドと AI プロンプト                                 | [カスタムプロンプト](/docs/platform/dashboard/guides/defining-context-for-translations)(全体またはロケールごとに設定)                                          |
| 文字列の文脈と最大長                                        | Android および iOS のソースファイル内のコメント(General Translation が文脈として読み取ります)、または JSON・YAML の場合は[キーごとのメタデータ](/docs/cli/reference/keyed-metadata)ファイル |
| 翻訳メモリ                                             | アップロード済みの翻訳:変更のない文字列は既存の翻訳がそのまま使われ、新規または変更された文字列のみが翻訳されます。TMX ファイルはインポートされません                                                           |
| GitHub または GitLab インテグレーション(デフォルトでは `l10n_` ブランチ) | CI での [`npx gt translate`](/docs/cli/reference/commands/translate) の実行、または [Locadex](/docs/platform/locadex/quickstart) のプルリクエスト        |
| 校正と承認                                             | [ダッシュボード](/docs/platform/dashboard/guides/reviewing-translations)での編集(承認機能はエンタープライズプランで利用可能)                                            |
| モバイルアプリ向けの OTA(Over-the-air)コンテンツ配信               | 翻訳はアプリのリリースごとにリソースファイルに含めて提供されます                                                                                                        |

CLI は JSON、YAML、`.pot` と `.po`、iOS の `.strings`・`.stringsdict`・`.xcstrings`、Android の `strings.xml`、`.resx`、HTML、Markdown と MDX などに対応しています([対応フォーマット](/docs/cli/reference/config#files)を参照)。XLIFF、ARB、Java の `.properties`、CSV および XLSX 形式の文字列ファイルには対応していません。

## ステップ 1: Crowdin が未翻訳箇所を原文で埋めないようにする

Crowdin はデフォルトで、ファイルが空にならないよう[未翻訳の文字列を原文のままエクスポート](https://support.crowdin.com/project-settings/export/)します。そのままインポートすると、その英語が翻訳済みとして扱われてしまいます。ダウンロードする前に、Crowdin プロジェクトの **Settings &gt; Export** で **Skip untranslated strings** を有効にするか (**Skip untranslated files** が有効になっている場合は効果がありません) 、`crowdin.yml` で [`skip_untranslated_strings`](https://crowdin.github.io/crowdin-cli/advanced) を設定してください。

```yaml title="crowdin.yml"
files:
  - source: /locales/en/**/*.json
    translation: /locales/%locale%/**/%original_file_name%
    skip_untranslated_strings: true
```

「スキップ」の挙動はファイル形式によって異なります。Crowdin は、フラットな JSON、YAML、Android XML、iOS の `.strings` および `.stringsdict`、`.resx` では未翻訳の文字列を削除します。一方、ネストされた JSON、i18next JSON、gettext PO、TS または JS ファイルでは、未翻訳の文字列を空の値としてエクスポートします。そのため、これらのファイルについては、インポート前に空文字列を検索して削除してください。校正済みの翻訳だけを移行したい場合は、`export_only_approved: true` を追加してください。

## ステップ 2: 翻訳をダウンロードする

原文ファイルがすでにリポジトリにある場合は、[Crowdin CLI](https://crowdin.github.io/crowdin-cli/commands/crowdin-download) で翻訳をダウンロードします。まずはパスをプレビューで確認しましょう:

```bash
crowdin download --dryrun
crowdin download --skip-untranslated-strings
```

CLI を使わない場合は、Crowdin プロジェクトの **Translations &gt; Build &amp; Download** を使用します。この方法では、プロジェクトのエクスポート設定が適用されます。Crowdin Enterprise を利用している場合は、`crowdin.yml` の `base_url` に組織の API アドレスを設定してください。

ロケールのフォルダ名を確認してください。`%locale%` は `uk-UA` のような言語と地域を組み合わせたコードを生成し、`%two_letters_code%` は `uk` のような言語のみのコードを生成します。`gt.config.json` にも同じコードを記載するか、Crowdin の [`languages_mapping`](https://support.crowdin.com/developer/configuration-file/) オプションを使ってエクスポート時にコードを変更してください。

## ステップ 3: Crowdin による翻訳のプッシュを停止する

Crowdin の GitHub および GitLab インテグレーションは、[デフォルトで 1 時間ごとに同期](https://support.crowdin.com/github-integration/)し、`l10n_` ブランチからプルリクエスト (GitLab ではマージリクエスト) を作成します。General Translation がファイルを書き込む前に、インテグレーションの **Sync Schedule** を空にして保存し、Crowdin からリポジトリへ翻訳が送信されないようにしてください。なお、この設定を編集できるのは、インテグレーションを設定したメンバーのみです。また、未解決の `l10n_` プルリクエストをすべてクローズし、CI から Crowdin のステップを削除してください。General Translation でファイルを管理できるようになったら、インテグレーション自体を削除しても問題ありません。2 つのツールが同じファイルに書き込むと、最後に書き込まれた内容で上書きされます。

## ステップ 4: CLI で同じファイルを参照する

`gt` CLI をインストールし、`crowdin.yml` のエントリを `gt.config.json` の形式に置き換えます。各 `translation` パターンは、`[locale]` を含む `include` パターンになります。

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["de-DE", "pt-BR", "uk-UA"],
  "files": {
    "json": { "include": ["locales/[locale]/**/*.json"] }
  }
}
```

[`npx gt login`](/docs/cli/reference/commands/login) でサインインして `GT_PROJECT_ID` を設定するか、設定ファイルで `projectId` を指定します。CI では、**ファイル &gt; 書き込み**、**翻訳キュー &gt; 有効**、**文脈 &gt; 書き込み** の権限を持つプロジェクトのAPIキーを `GT_API_KEY` に設定してください。

## ステップ5：用語集と文字列の文脈を移行する

プロジェクトのオーナーまたはマネージャーは、Crowdin の [Glossaries](https://support.crowdin.com/glossary/) ページから、または CLI を使って、用語集を CSV 形式でダウンロードできます (ID は `crowdin glossary list` で確認できます) 。

```bash
crowdin glossary download <glossary-id> --format csv --to ./glossary.csv
```

Crowdin では、列名が言語ごとに付けられています。`Term [en]` を `term` に、`Description [en]` を `definition` に、`Term [de]` などの各ターゲット言語の列を `translation_de` にそれぞれ名前を変更し、残りの列を削除してファイルを保存してください。General Translation のインポーターはこのレイアウトをそのまま読み込み、それ以外のレイアウトは AI で解釈します。ダッシュボードで [コンテキストグループ](/docs/platform/dashboard/guides/defining-context-for-translations) を作成し、**Import** をクリックしてファイルを選択します。最初の翻訳を実行する前に、そのグループをプロジェクトに割り当ててください。こうすることで、新しい翻訳に最初から独自の用語が適用されます。

文字列の文脈は、開発者が書いたものか Crowdin が生成したものかを問わず、その文字列の意味を翻訳者に伝えるものです。Android の `strings.xml` や iOS の `.strings` などの原文ファイルで各文字列の上に記述されたコメントは、そのまま文脈として General Translation に渡されます。Crowdin にのみ保存されている文脈については、Crowdin の [source strings API](https://support.crowdin.com/developer/api/v2/#tag/Source-Strings/operation/api.projects.strings.getMany) から各文字列の `context` と `maxLength` を取得してください。Android と iOS では文脈をコメントとして原文ファイルに追加し、JSON と YAML では両方の値を原文ファイルと同じ場所にある [キーごとのメタデータ](/docs/cli/reference/keyed-metadata) ファイルに書き込みます。

```json title="locales/en/common.metadata.json"
{
  "checkout": {
    "save": { "context": "Button that saves the shipping address", "maxChars": 12 }
  }
}
```

スタイルガイドとAIプロンプトの指示は、[カスタムプロンプト](/docs/platform/dashboard/guides/defining-context-for-translations)として設定し直してください。翻訳メモリをアーカイブとして保管しておく場合は、`crowdin tm download <tm-id>` でTMX形式でダウンロードしてください。

## ステップ 6: 翻訳の前にアップロードする

最初に [`npx gt upload`](/docs/cli/reference/commands/upload) を実行します。このコマンドは、各ソースファイルと、各ロケールに対応する翻訳済みファイルを送信し、それらの翻訳を完了済みとして保存します。

```bash
npx gt upload
npx gt translate
```

その後、[`npx gt translate`](/docs/cli/reference/commands/translate) は新しいロケールや翻訳のないファイルなど、不足している分だけを翻訳し、結果を同じパスに書き込みます。[`npx gt upload`](/docs/cli/reference/commands/upload) より前に [`npx gt translate`](/docs/cli/reference/commands/translate) を実行すると、新しい翻訳が生成され、ダウンロード済みのファイルが上書きされてしまいます。Crowdin で未翻訳のままだった文字列は、そのソースファイルが次に変更された時点で General Translation が翻訳します。早めにリリースしたい場合は、ダウンロード前に Crowdin で翻訳を済ませておいてください。

## ステップ 7: 新しいテキストを自動で翻訳する

今後は、[ビルドまたは CI](/kb/translations-in-ci) で [`npx gt translate`](/docs/cli/reference/commands/translate) を実行するか、[Locadex](/docs/platform/locadex/quickstart) に翻訳を含むプルリクエストを作成させてください。また、`gt-lock.json` もコミットしてください。このファイルには CLI が書き込み済みの翻訳が記録されており、同じ翻訳を再度ダウンロードせずに済みます。チームがリポジトリ内の翻訳済みファイルを直接編集している場合は、次回の翻訳を実行する前に [`npx gt save-local`](/docs/cli/reference/commands/save-local) を実行してください。これにより、その編集内容が保持されます。

## Crowdin を使い続けるべきなのはどのような場合ですか？

オープンソースプロジェクトで Crowdin の無料ライセンスやコミュニティの翻訳者を活用している場合、Crowdin のベンダーマーケットプレイスを通じて人手による翻訳を依頼している場合、XLIFF や Office ファイルをやり取りしている場合、あるいはネイティブモバイルアプリで OTA (over-the-air) アップデートを利用している場合は、Crowdin を使い続けることをおすすめします。 ([General Translation と Crowdin の比較](/kb/general-translation-vs-crowdin)を参照してください。)

## よくある質問

### 校正済みの翻訳は失われますか？

いいえ。エクスポート時に未翻訳の文字列をスキップし、[`npx gt translate`](/docs/cli/reference/commands/translate) の前に [`npx gt upload`](/docs/cli/reference/commands/upload) を実行すれば、失われることはありません。アップロードした翻訳は、原文が変更されない限りそのまま保持されます。また、どの翻訳も[ダッシュボード](/docs/platform/dashboard/guides/reviewing-translations)からチームで修正できます。

### 一部のコンテンツで Crowdin を引き続き使用できますか？

はい。`gt.config.json` の `include` と `exclude` で対象を General Translation が管理するファイルに絞り込み、それ以外のファイルは引き続き Crowdin で同期してください。ただし、両方のツールが同じファイルに書き込まないように注意してください。

## 重要なポイント

* エクスポート前に「Skip untranslated strings」を有効にしてください。無効のままだと、Crowdin が未翻訳の箇所を原文で補完し、それが翻訳としてインポートされてしまいます。
* General Translation が同じファイルに書き込む前に、Crowdin の Git インテグレーションによる翻訳のプッシュを停止してください。
* 翻訳を始める前に、`crowdin.yml` の設定を `gt.config.json` に反映し、用語集をコンテキストグループにインポートしたうえで、Crowdin に保存されている文字列の文脈をキーごとの文脈として移行してください。
* 初めて [`npx gt translate`](/docs/cli/reference/commands/translate) を実行する前に [`npx gt upload`](/docs/cli/reference/commands/upload) を実行してください。以降は、新しいテキストをビルド時または Locadex で翻訳します。

## Related questions

- [Crowdin の代替ツール：General Translation と Crowdin の比較](https://generaltranslation.com/ja/kb/general-translation-vs-crowdin.mdx): テキストをコンポーネント内に置いたまま、ビルドとあわせて翻訳を生成したいなら General Translation がおすすめです。Crowdin はリソースファイル、翻訳者、レビューワークフローを中心に翻訳プロジェクトを管理するツールで、エンジニアがそれらをアプリに接続し、プロダクトの変化に合わせて保守していく必要があります。なお、オープンソースのコミュニティ翻訳やベンダー主導の翻訳プログラムでは、Crowdin は今も有力な選択肢です。
- [Lokalise から General Translation へ移行するには？](https://generaltranslation.com/ja/kb/migrate-from-lokalise.mdx): リソースファイル、i18nライブラリ、レビュー済みの翻訳はそのまま使えます。空の翻訳を除外して Lokalise からエクスポートし、Lokalise の GitHub 同期を無効にしたうえで、最初の npx gt translate を実行する前に npx gt upload でファイルをインポートします。以降は General Translation がビルド時に新規・変更された文字列を翻訳します。用語集は コンテキストグループ に、キーの説明はキーごとの文脈として引き継がれます。
- [PhraseからGeneral Translationに移行するには？](https://generaltranslation.com/ja/kb/migrate-from-phrase.mdx): ロケールファイル、i18nライブラリ、検証済みの翻訳はそのまま引き継げます。未翻訳のキーやフォールバックを含めずにPhrase Stringsからプルし、Repo Syncを無効化したうえで、最初のnpx gt translateを実行する前にnpx gt uploadでファイルをインポートします。以降はGeneral Translationがビルド時に新規・変更された文字列を翻訳します。用語ベースはコンテキストグループとして、キーの説明はキーごとの文脈として活用されます。
- [デプロイのたびに翻訳を最新の状態に保つにはどうすればよいですか？](https://generaltranslation.com/ja/kb/translations-in-ci.mdx): 本番環境のビルド前に、翻訳をパイプラインのステップとして毎回実行します。こうすることで、新しいテキストは追加されたデプロイと同時に翻訳済みの状態でリリースされます。General Translation の gt CLI では、CI シークレットとして保存したプロジェクトの APIキーとプロジェクトIDを使い、npx gt translate でこれを実現します。
- [翻訳メモリとは？AI時代にもまだ必要なのか](https://generaltranslation.com/ja/kb/what-is-translation-memory.mdx): 翻訳メモリ（TM）は、過去の翻訳元と訳文のセグメントのペアを蓄積したデータベースで、翻訳ツールはこれを検索して完全一致、文脈一致、ファジーマッチを見つけます。AIを使う場合でも、承認済みの訳語を再利用し、過去の翻訳を文脈として参照できるようにしておくことは重要です。General Translation は、ファイルの以前のバージョンからマッチする翻訳を再利用し、チームによる編集も保持するため、TM を別途管理する必要はありません。

## Previous and next questions

- Previous question: [AIコーディングエージェントと翻訳パイプライン：ローカライゼーションの自動化にはどちらを使うべきか](https://generaltranslation.com/ja/kb/ai-coding-agent-vs-translation-pipeline.mdx)
- Next question: [Lokalise から General Translation へ移行するには？](https://generaltranslation.com/ja/kb/migrate-from-lokalise.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/ja/kb/sitemap.md) for every article.
