この問題のさらに強力な解決策があります。ライブラリが国際化プロセスは非常に簡単になりますTranslationExchangeのTML(翻訳マークアップ言語)を使用しています
https://github.com/tr8n/tr8n_objc_clientsdk
TranslationExchange.comからTr8nライブラリを見てみましょう。まず、Strings XMLファイルをもう一度扱う必要はありません。本当に... - Tr8n SDKは、あなたのためにStringファイルを作成し、管理します。あなたはそれらをもう一度見ないでしょう。
あなたの特定の例は、単純に次のようになります。
Tr8nLocalizedStringWithTokens(@"{count || object}", @{@"count": objectList.count})
Tr8nライブラリが自動的に任意の言語であなたのために右の複数形を選択します。ハ?はい、それは魔法です。上記のトークンの例の完全な形式は、実際にある:「カウント」トークンは、「1」と「その他」のキーワードを使用して、英語の複数形にマッピングされている数値型であることを意味
{count:number || one: object, other: objects}
....しかし、 Tr8nはあなたがそれをすべて入力しないほどスマートです。また、パラメータのシーケンスを適切なルール値にマップするのに十分なほどスマートです。もちろん、 "count"は命名規則によって数値ルールに関連付けられています。だから、単純に次のようになります。
{count || object}
をところで、あなたはロシア言及したことから、上記のためのロシア語の翻訳は、単純に次のようになります。
"{count || object}" = "{count || объект, объекта, объектов}"
は、この例では、あまりにも簡単だった、のを見てみましょうもう一つ興味深い:すべての
Tr8nLocalizedStringWithTokens(
@"{user} uploaded {count || photo} to {user | his, her} photo album.",
@{@"user": user, @"count": 5}
)
まず、幸運は、標準のiOS国際化ライブラリ(またはそのことについては、他のライブラリ)を使用して、この文を翻訳...それは冗談だ - しかし、本当に、方法はありません何かを使ってやるが、Tr8n。ロシア語に翻訳
TML上記ザ・単純に次のようになります。ここでは
@"{user || загрузил, загрузила} {count || фотографию, фотографии, фотографий} в свой фотоальбом."
我々は性別に対処する私たちは、数値のルールを扱うのと同じ方法を支配します。しかし、「1つ」、「少数」、「その他」の代わりに、「男性」、「女性」、「未知」があります。各言語の性別や数字は異なる場合があります。 Tr8nはそれに対処するので、必要はありません。
さて、次のレベルに進んでみましょう。太字にする写真の枚数を決めなければならないと決めました。ケーキの一片。
Tr8nLocalizedAttributedStringWithTokens(
@"{user} uploaded [bold: {count || photo}] to {user | his, her} photo album.",
@{
@"user": user,
@"count": 5,
@"bold": @{@"font":@{@"name": @"system", @"size": @12, @"type": @"bold"}}
}
)
[bold:...]は装飾トークンです。マクロをAttributedStringバージョンに切り替えたことに気がつきましたか?このマクロは実際にはiOSのネイティブな装飾メカニズムを使用してNSAttributedStringを生成します。あなたはロシア語の翻訳が何であるかを推測できますか?あなたがそれらを毎回定義維持する必要はありませんので、
@"{user || загрузил, загрузила} [bold: {count || фотографию, фотографии, фотографий}] в свой фотоальбом."
ところで、あなたは、他の場所ですべてのあなたの装飾のトークンを事前定義することができます。
ちょうど1より多くの最後の例をやってみましょう...と言う、あなたは次の形式でニュースフィードの物語を持っている:
Tr8nLocalizedAttributedStringWithTokens(
@"{actor} sent {target} [bold: {count || gift}].",
@{
@"actor": user1,
@"target": user2,
@"count": 5
}
)
それは英語で面白そうに見えるしません。しかし、それはロシア語や言語の場合をサポートする他の言語で行われます。 {target}の名前は、ロシア語である場合は、実際にはロシア語のDative Language Caseを使用する必要があります。
http://en.wikipedia.org/wiki/Dative_case
あなたはロシア語を話せない場合は、おそらくそれについて知っている必要はありません。しかし、あなたのロシアの翻訳者はすべきです。さんはその後、ロシア語の翻訳を見てみましょう:
@"{actor || подарил, подарила} {target::dat} [bold: {count || подарок, подарка, подарков}].",
Tr8nは、その強力な言語のルール・エンジンを使用し、{対象}トークンを通過したロシアの名に与格言語のケースを適用するのに十分なスマートです...
こと簡単な数字の質問に対する長い答えでした。それを読んでいただきありがとうございます。それが役に立てば幸い。
免責事項:私はTr8nフレームワークとTML言語の作成者です。ご不明な点がございましたら、私にpingしてください。私はあなたの翻訳に関するすべての質問をお手伝いしたいと思います。
行う - あなただけの1つの複数以上が必要になりますそのため、他の言語があります。 –
この問題の詳細な説明については、http://www.gnu.org/software/hello/manual/gettext/Plural-forms.htmlを参照してください(また、不規則な言語のかなり長いリスト)。 –
ありがとうパベル、私はそれに応じて質問を編集しました – zvolkov