.NET-痛みのないローカライズ。 (N)gettext + poedit



新しいプロジェクトを作成するには、* .resx for WinForms、I2Localization for Unity、またはアプリケーションをローカライズする他のソリューションを使用する必要がありました。 これらのソリューションはすべて、ローカライズキーを考え出し、コードと辞書に挿入する必要があるという点で似ています。 最初はすべて問題ありませんが、時間が経つにつれて、このプロセスはいらいらし始めます。 ただし、コード内のキーを見ると、これが何であるかは必ずしも明確ではありません。

ローカライズをまったく存在しない大規模なプロジェクトに追加する必要がある状況については、それがどれほど難しいかは言いません。

理由はわかりませんが、gnu / gettextのような既製のソリューションが長い間存在していることがわかりました。 友人や同僚(.NETを使用している人)に尋ねると、ほとんどの人はこれを聞いていません。 そのため、この便利なツールと共有することにしました。

原理は簡単です。 コードを英語で記述し、ソースをスキャンして翻訳する機能を提供するユーティリティを実行します。 発明する鍵はありません。 英語のテキストがキーです。

さあ始めましょう


1)Nu-getを使用してNGettextパッケージをインストールします。
PM>インストールパッケージNGettext

NGettextは、.NET用のクロスプラットフォームGNU / Gettext実装です。

2)構文を少し簡略化する追加のファイルをプロジェクトに追加します。
https://github.com/neris/NGettext/blob/master/doc/examples/T.cs

また、翻訳を保存するディレクトリをプロジェクトに追加します。
MyProj \ Loc \ ru-RU \ LC_Messages

私の場合、次の図が表示されます。



3)T.csファイルにパスを追加します。

static T() { var localesDir = Path.Combine(Directory.GetCurrentDirectory(), "Loc"); _Catalog = new Catalog("Test", localesDir, new CultureInfo("ru-RU")); } 

簡略化。 たとえば、ロシア語のみ。 (アセンブリ自体から辞書を読み取ることが可能です)

4)ローカライズを使用してコードを記述します。 「テキスト」の代わりにT ._(「テキスト」)と書く

 namespace TestCode { static class Program { public static void Main(string[] args) { Console.WriteLine(T._("Hello, World!")); Console.WriteLine(T._("Cat")); Console.ReadKey(); } } } 

5)次に、テキスト全体を翻訳する必要があります。 PoEditをダウンロードします 。 翻訳ファイルを作成します。
ファイル->作成-> LC_MESSAGESフォルダー-> Test.po



ソースがあるフォルダーを示します。 彼らのプログラムはスキャンします:



また、poEditが翻訳を検索するキーワードを指定する必要があります。



必要な翻訳を追加して保存します。



翻訳ファイルをプロジェクトに追加します。 常にコピーする:
(アセンブリ自体に埋め込むことができます)



できた 以下を開始します。



セットアップの準備ができました。 残りは簡単です。 コードを書く-翻訳を編集する


インターフェイスをローカライズするための既製のライブラリも見つけることができます。

WPF
NGettextの使用に関する追加情報
GNU / Gettext情報

Source: https://habr.com/ru/post/J432786/


All Articles