12

PHP (または一般的には gettext ) では、動的コンテンツへの変数を検出したときに gettext は何をしますか?

私は2つのケースを念頭に置いています。

1) 私が を持っているとしましょう<?=$user1?> poked John <?=$user2?>。言語によっては、単語の順序が異なる場合があります。gettext はそれをどのように処理しますか? (いいえ、私はFacebookを構築していません。これは単なる例です)

2)データベースにいくつかのカテゴリを保存するとしましょう。それらはめったにありませんが、データベースに保存されます。もしそうしたらどうなります<?php echo gettext($data['name']); ?> か?翻訳者にそれらのカテゴリ名も翻訳してもらいたいのですが、データベース自体で行う必要がありますか?

ありがとう

4

3 に答える 3

5

マークが言ったことに少し基づいて構築するには...上記のソリューションの唯一の問題は、静的リストを常に手動で維持する必要があり、他のすべての前に新しい文字列を追加するか、既存のものを完全に変更すると、ソフト翻訳に使用すると、新しい文字列が混乱し、一部の翻訳が失われる可能性があります。

私は実際にこれについて記事を書いています(すぐに終わらせるには時間がかかりすぎます!)が、私の提案する答えは次のようになります。

Gettext を使用すると、文字列が .po ファイル内のコードに表示される行番号を保存できます。文字列を完全に変更すると、.po エディターは文字列が新しいものではなく、古いものであることを認識します (行番号のおかげで)。

これに対する私の解決策は、データベースを読み取り、すべての gettext 文字列を含む静的ファイルを作成するスクリプトを作成することです。Mark のソリューションとの大きな違いは、データベースの主キー (ID としましょう) が新しいファイルの行番号と一致することです。その場合、元の翻訳を 1 つ完全に変更しても、行は同じままで、翻訳ソフトは文字列を認識します。

もちろん、より新しく、よりインテリジェントな .po エディターが存在する可能性もありますが、少なくとも新しい文字列で問題が発生している場合は、これで解決します。

私の2セント。

于 2010-01-20T20:57:45.110 に答える
4

コードのどこかに: <?=sprintf(_('%s poked %s'), $user1, $user2)?> があり、言語の 1 つが引数を交換する必要がある場合、それは非常に簡単です。次のようにコードを翻訳するだけです。 msgid "%s poked %s" msgstr "%2$s translation_of_poked %1$s"

于 2016-12-15T13:35:29.940 に答える