おそらく誤解を招くタイトルです。申し訳ありませんが、以下でよりよく説明できることを願っています。
私は人気のあるオープンソース プロジェクトの一員であり、視聴者が望む言語コードのプロジェクトの翻訳を提供したいと考えています。私たちの翻訳はすべてユーザーベースによって提供されており、この支持者/ユーザーの団体が必要とするものは何でもサポートしたいと考えています.
このプロジェクトは Python/Django で書かれており、翻訳提案を管理する素晴らしいサービスとして gettext と最終的に Transifex を使用しています。
問題は、誰かが言語のロケール バリアントを必要とする場合です。この質問ではフランス語 (fr) を仮定しましょう。
言語コードの確かな翻訳がすでにありますfr
。しかし、たとえばカナダからの寄稿者がやって来て、寄稿を希望した場合fr_CA
、次のシナリオのために突然メンテナンスの頭痛の種になります。
翻訳は
fr_CA
不完全です。この場合、gettext は「未翻訳」にフォールバックします。これは、このプロジェクトでは を意味しen
ます。翻訳が
fr_CA
から大量のビットをコピーしfr
、ロケールによりよく一致するようにあちこちでいくつかのビットを変更するだけである場合、ベースのfr
翻訳で何かを変更する必要があることがわかり、突然、そうではない同期の問題が発生します。fr_CA
話せない貢献者でも簡単に解決できます。
私にとってもっと理にかなっているように思われるのは、言語を「積み重ねる」ことができる何らかの形式の「オーバーレイ」設定があるということです。fr
ベースで、次にfr_CA
、さらに特定のロケールバリアントをその上に配置します。私が望むのは、これらがすべて定義されたら、翻訳者はfr_CA
そのロケールとスタック内の「下」のロケールの違いを更新するだけでよいということですfr
。より一般的なロケールと比べて変わらないものをレイヤーの下に残すことで、同期の問題を発生させることなく、必要に応じて修正/更新を自由に行うことができます。
この種の「スタッキング」は、コンパイルされた MO ファイルを作成する過程で最終的に解決されると思います。
これを達成する方法を知っている人はいますか?