0

gettext 関数を使用してアプリケーションを翻訳するために po ファイルを使用しています。スペース、コロン、疑問符などの書式設定文字を使用する文字列がたくさんあります....

ここでのベストプラクティスは何ですか?

例えば:

_('operating database: '). DB_NAME. _(' on ').DB_HOST;
_('Your name:');

また

_('operating database').': '. DB_NAME.' '._('on').' '.DB_HOST;
_('Your name').':';

それらを翻訳したままにしておくべきですか、それともハードコーディングした方がよいですか? 長所と短所は何ですか?

4

2 に答える 2

1

あなたの例はどちらも良くありません。

ベスト プラクティスは、自己完結型の表示テキスト ユニットごとに 1 つの文字列を使用することです。たとえば、メッセージ ボックスを表示している場合、複数の文が含まれている場合でも、そのすべてのコンテンツを 1 つの翻訳可能な文字列にする必要があります。ラベル: 1 つの文字列。メッセージ: 1 つの文字列。

絶対に避けられない場合を除き、上記の例のように、表示されたテキストをコードで連結された複数の文字列に分割しないでください。代わりに、文字列フォーマットを使用してください:

sprintf(_('operating database: %s on %s'), $DB_NAME, $DB_HOST);

その理由は、a) 一部の翻訳では引数を異なる順序で配置する必要がある場合があり、b) 翻訳者が作業するコンテキストが得られるためです。たとえば、「on」だけでも、コード内での使用方法が異なる場合でも、文によってまったく異なる翻訳が行われる可能性があるため、翻訳者にその単語だけを翻訳させると、必然的に貧弱で理解しにくく、壊れた翻訳につながります。

GNU gettext マニュアルにもこれに関する章があります。

于 2013-06-05T06:33:33.663 に答える
0

それらを翻訳のままにしておくと、すべての翻訳でそれらが複製されます。これは、このスペース、コロンなどすべてが言語ごとに複製されることを意味します。何のために?私は、文字列の意味部分だけを翻訳する立場にあります (2 番目のバリアント)。

于 2013-06-04T11:21:15.000 に答える