典型的なJava I18Nプロセス - 翻訳される翻訳会社にリソースファイルを送信する
-
03-10-2019 - |
質問
Java ResourceBundlesを使用して、複数の言語でUIを提供するためのチュートリアルがたくさんあります。ただし、があります 処理する 私が答えを見つけることができないように見える翻訳会社との典型的な相互作用に関して質問。
たとえば、私はフランス語を知らないと仮定し、アプリの翻訳を取得するために翻訳会社を雇う必要があると仮定すると、私はそれらを送りますか
- デフォルトのリソースプロパティは、キーと英語の値を含む「whation_en_us.properties」をファイルし、「whate_fr_fr.properties」を取得しますか?
- 空の値と「whate_en_us.properties」を備えた「whing_fr_fr.properties」?
- 他の組み合わせ?
解決
あなたの質問はテクノロジーではなくプロセスに関するものなので、私はあなたに徹底的な説明をしようとします。以前の翻訳がないアプリケーションがあると仮定すると、理想的なプロセスは次のようになります。
翻訳用に英語ファイルを送信します。翻訳請負業者との契約に応じて、使用できます。
- デフォルトのプロパティファイル(あなたはそれらを正しく名前を変更する責任があります)
- キー、英語のフレーズ、翻訳用の空の列を含むエクセレンススプレッドシート
- getText *.poファイルgetTextを使用する場合
- 翻訳メモリファイル(s)(すなわちcordos *.tmxファイル)
ファイルを受け取ると、これらの翻訳を製品に入れ、ローカライズされたビルドを作成してテストします。確かに、いくつかのUIの問題があります。自分で修正できるものもあれば、追加の翻訳(ハードコーディングされた文字列など)が必要なものもあれば、翻訳を短縮する必要があるものもあります。繰り返しますが、翻訳請負業者に関与し、翻訳する必要がある文字列を提供します。ここでは、スプレッドシートを使用できます(翻訳する必要がある文字列がそれほど多くない場合)。
同時に(すべての言語を一度に)出荷する場合は、翻訳者を早期にエンゲージする必要があります。 UI文字列は変更されるため(Hard-UIフリーズ期間や翻訳フリーズ期間がない場合)、翻訳を更新する必要があります。この場合、翻訳する必要がある文字列(英語)を既に翻訳したファイルを提供する必要があります。変更が非常に小さい場合は、英語の文字列のみを送信して翻訳を手動でマージできます。そうしないと、ある種の翻訳メモリ交換形式(getText *.po'sまたはtrados *.tmxはここで素晴らしい)を使用することが最善です。
通常、ファイルの翻訳では十分ではありません。通常、コンテキストが与えられておらず、異なる単語がターゲット言語で異なることを意味する可能性があるため、翻訳エラーが発生します。あなたが言語を知っていない限り、彼らがいることを知る方法はありません。そのため、UIのスクリーンショットを撮影してレビューのために送信する必要があります(翻訳請負業者または品質要件に応じて他の誰かがレビューすることができます)。
レビューしたら、翻訳の変更を適用し、UIの問題をテストする必要があります...
UI文字列翻訳プロセスについて話している場合、それについてです。ただし、アプリケーション(ドキュメント、ヘルプファイル、アイコン、色、音など)を正しくローカライズするためにさらに多くのことがあることをお勧めします。
他のヒント
あなたの質問に答えるために、私は(2)を選びます。
実際には、Javaリソースバンドルよりも他の何かを使用する方がはるかに簡単であることがわかりました。
私は個人的にこれを処理する別の方法を使用しています。 GetText Wayを使用します(GetTextresource.javaというファイルがあります。 ここ).
もしも GetTextに精通していることは、このアプローチがはるかに簡単で実用的であることが間違いなく見つかるでしょう。翻訳者にPOファイルを与えるだけです(で編集できます ポディット)。 POファイルからJavaクラスを作成すると、アプリケーション内で使用されます(これはMSGFMTを使用して実行されます - POファイルのJavaコンパイルのパラメーターを指定します)。 POファイルは、XgetTextコマンド(コマンドラインから)を使用して、かなり簡単に更新できます。
もちろん、すべてが中にあります GetTextマニュアル.
利点:
getTextは、複数形のフォームを選択する方法を提供します[nファイル削除 "(nは数字)などのメッセージはもうありません - 参照 ngetText.
Javaファイルが新しいトークンで更新されたら、文字列を翻訳するためのスクリプト可能な方法
いくつかのマクロを使用して各文字列にアクセスする必要はありません(翻訳(delete_button_macro)など)。このようにコードを書くだけです:
package translateutil; import gnu.gettext.GettextResource; import java.util.ResourceBundle; import java.util.Locale; public class TranslateUtil { private static ResourceBundle myResources =null; public static boolean init(Locale loc, String resourceName) { boolean bRet = true; Locale.setDefault(loc); try { myResources = ResourceBundle.getBundle(resourceName); System.out.printf( _("Current language: %s\n"), Locale.getDefault().getDisplayName() ); System.out.printf( _("%s resource found\n"), myResources.getClass().getName() ); } catch(Exception e) { // let the application go on in English in case the ResourceBundle // was not found. Notify about the error bRet = false; System.out.println( e.toString() ); myResources = null; } return bRet; } public static String _(String str) { if (myResources == null) { return str; } { return GettextResource.gettext(myResources, str); } } public static String _Plural(String singular, String plural, long param) { if (myResources == null) { if (param == 1) { return singular; } else { return plural; } } else { return GettextResource.ngettext(myResources, singular, plural, param); } } }
これがサンプルです
// example
// similar for plural
import static translateutil.TranslateUtil._;
System.out.println(_("The english text"));
あなたが何を選択しても、幸運を!