そこで、次のアイデアが浮かびました:この問題に対処し、将来的にローカライズされたコードの記述を簡素化するために、何らかの一般的な形式、 マイクロ言語 (関数format()またはsprintf()の定評のある形式に類似)を考え出してみませんか
ご存知のように、異なる言語では異なる数の複数形の数字。 英語には2つあります( “ 1 file” 、 “ many files” )。 ロシア語-3( 「1ファイル」 、 「2ファイル」 、 「多くのファイル」 )。 アラビア語では、一般に、Pootleが私たちに言うように、6個ものピースがあります。 したがって、いくつかの部分文字列のセットと、これらの部分文字列の選択が依存するパラメータを行に直接設定できる必要があります。
複数のオプションがある推奨サブストリング形式:
{%COUNTER%|FORM0|FORM1|FORM2[|FORM3][|FORM4][|...]}
どこで
%COUNTER%
は特定の変数名で、値[0,1,2,3、...]を持つことができます
FORM0
は、COUNTER = 0の文字列のバージョンです(これは特別な場合で、通常は個別のメッセージが必要です)
FORM1
、
FORM2
など -これらは、特定の言語の複数形ごとの代替テキストオプションです。 英語の場合は2つのオプション、ロシア語の場合は3つのオプションになります。
英語の例:
{%F%|No files|1 file|%F% files} found in {%D%|0 folders|1 folder|%D% folders}.
これにより、%F%と%D%のさまざまな値を置き換えるときに、出力行の次の最終的なバリアントが得られます。
%F%= 0、%D%= 1 => 1つのフォルダーにファイルが見つかりません。
%F%= 1、%D%= 2 => 2つのフォルダーで1つのファイルが見つかりました。
ロシア語に翻訳された文字列の同じ例:
{%F%| |1 |%F% |%F% } {%D%|0 |1 |%D% |%D% }.
これにより、%F%と%D%のさまざまな値を置き換えるときに、出力行の次の最終的なバリアントが得られます。
%F%= 0、%D%= 1 => 1つのフォルダーにファイルが見つかりません。
%F%= 1、%D%= 2 => 2つのフォルダーで1つのファイルが見つかりました。
いくつかのそのような異形のインクルードを含む翻訳用の文字列全体を受け取ったことにより、翻訳者は、a)文字列のすべての部分がどのコンテキストで使用されているかを理解しやすくなり、b)最後に文字列の音が良くなるように操作できることに注意してください
さまざまなプログラミング言語でこのようなマイクロ言語を実装することは素晴らしいことです。
誰かがアイデアを思いつくことを願っています。
UPD:結果はもうすぐでした。 このトピックでは、 webdew habrayuzerがC#での関数の実装を共有しています。