2012-05-18 4 views
19

一般に、変換メソッドはキー>値マッピングを使用し、そのキーを値に変換するためにキーを使用します。今私は、あなたの翻訳キーの名前を付けるための2つの異なる方法を認識しています。私のチーム内では、最良の方法と思われるものをコンセンサスにすることはありません。変換ファイルのキー値のベストプラクティス

方法1: 使用いっぱい英語の単語や文章:

Name => Name 
Please enter your email address => Please enter your email address 

方法2:状況を説明 使用キーワード:

NAME => Name 
ENTER_EMAIL => Please enter your email address 

私は個人的にための方法の1位を好みますそれはメッセージの意味を直接示しています。翻訳が存在しない場合は、キーにフォールバックする可能性があり、問題はありません。しかし、すべてのファイルを更新する必要があるため、翻訳が頻繁に変更されると、この方法は面倒です。また、長いテキストの場合、これらのキーは非常に大きくなります。これは、ENTER_EMAILのようなキーを使用することで解決されますが、フレーズは完全にコンテキスト外です。抽象的な変換キーのリストは膨大なものになります。その使用方法を説明するすべてのキーのメタデータが必要であり、衝突がより簡単に発生する可能性があります。

どちらの世界でも最高の方法がありますか?あなたのアプリケーションでどのように翻訳キーを使用しますか?私たちの場合、それはPHPベースのWebアプリケーションですが、上記の問題は一般的にi18nについて話すには十分一般的だと思います。

+0

興味深い質問です。私は#1も好む傾向がありますが、状況がそれを正当化するとハイブリッドになります。 –

+1

私はもちろん、英語(または元の言語)の項目が常に存在することを要件として#2を好む。各レコードには、変更されたメッセージや更新された翻訳の必要性を示すために最後に更新された日時も含まれていなければなりません。それとは別に、元の言語が何であるかを示すレコードを格納する必要があります。 –

答えて

18

これはiOS/OSX開発者が直面する問題です。また、方法1を前提としたstandard tool called genstringsもあります。もちろん、Appleの開発者はこのツールを使用する必要はありません。

方法1で得られるセーフティネットはいいですが(つまり、文字列をローカライズするのを忘れた場合はキーを表示できます)、競合するキーにつながるという欠点があります。文法規則や文脈の違いのために、表示テキストの同一部分を2つの異なる方法でローカライズする必要がある場合があります。たとえば、 "Eメール"のフランス語の翻訳は、ダイアログのタイトルであれば "Eメール"、ボタンの場合は "Envoyer un eメール"(フランス語では "Eメール"という単語は名詞となります。名詞と動詞の両方の英語とは異なり、動詞として使用することはできません)。方法2では、この問題を解決するためにEMAIL_TITLEとEMAIL_BUTTONというキーを持つことができました。これはボーナスとして、翻訳者に正しく翻訳するためのヒントを与えます。

方法2のもう1つの利点は、英語とすべてのローカライズでキーを更新することを心配することなく、英語のテキストを変更できることです。

ですので、方法2をおすすめします。

+0

あなたの 'EMAIL_TITLE'と' EMAIL_BUTTON'の例はとても良いものですが、現実的なものではないと思います。英語の開発者として、あなたはこのフランス語の事例を知らない。つまり、最初に「Eメール」(#1)または「Eメール」(#2)と書いています。フランス語の翻訳者が2つのキーが必要なメッセージが表示されるので、ボタンを「Eメール(ボタン)」(#1)または「EMAIL_BUTTON」(#2)に変更します。両方の方法のプロセスは同じですが、最終的には衝突があり、解決する必要があります。これについてあなたの考えは何ですか? –

+1

開発者はいくつかの国際化ルールに注意する必要があります。彼らは特定の言語を知る必要はありません。この場合、テキストが異なるコンテキストで再利用可能であることは期待できません(英語で問題がない場合でも)。だからあなたのアプリを開発しているときに、 "電子メール"ボタンの新しい文字列を導入すると、すでに "電子メール"があるが別のコンテキストであることがわかっていても、文字列テーブルにエントリを追加します。 – Clafou

+0

多くのプラットフォームでは、この非再利用ルールは、UIビューがバンドルでローカライズされており、文字列テーブルから各テキストをロードするコードを記述しないために役立ちます(同じピースの複数のインスタンスを取得することがよくあります – Clafou

1

なぜ両方の世界を使用しないのですか?私は短い文字列のために方法#1を使用し、完全な文章である長い文字列のために方法#2を使用する。私は同じファイルに両方を混在させることを恐れていません。新しいアプリのバージョンでユーザーエクスペリエンスが変更された場合

たとえば、次の文字列にテキストが変更される可能性があり:

"screen description" = "Tap the plus button to add a new item. Tap an item for more options or to edit its details."; 

をので、ここでそれが適用方法#2は理にかなっています。 ただし、次の例のような単純な文字列を、メソッド#1がより有用である。一般的には

"Preferences" = "Preferences"; 

人々は、それは多くの場合、私には制限見えるものを標準化しようとします。個人的には、私はいくつかのメソッドが有効である(例えば、このメソッド#1のメソッドと同様に、メソッド#2のスレッドのように、開発者のチームがコーディングスタイルに挑戦する場合など)、より "アナキスト的"なアプローチを好みます。

関連する問題