問題タブ [gettext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - メッセージ文字列を翻訳する場所 - ビューまたはモデル内?
多言語 (PHP) アプリケーションがあり、i18n に gettext を使用しています。バックエンド/モデルには、printf() のメッセージまたはメッセージ形式を返すクラスがいくつかあります。
xgettext を使用して、翻訳したい文字列を抽出します。
フロントエンド/ビューに gettext 関数 T_() を適用します - これはそれが属する場所のようです。これまでのところ、T_() 呼び出しからバックエンドをきれいに保ちました。このようにして、メッセージの単体テストも行うことができます。
したがって、フロントエンドには次のようなものがあります
また
これにより、MyModel クラスにダミーの T_("my message %s to translate") 呼び出しを配置しない限り、xgettext を適用して文字列を抽出することができなくなります。
したがって、これはより一般的な質問につながります。
バックエンド クラスで翻訳を適用しますか。どこに翻訳を適用し、翻訳する必要がある文字列をどのように追跡しますか?
(質問: poedit 動的 gettext の回避策を認識しています。)
c++ - C++ の機能を使用して、C で gettext() を直接使用するよりも i18n ライブラリをよりクリーンに使用する方法
次のようなコードを簡単に記述できるようにしたいと考えています。
しかし、それはi18nをサポートしています。を使用した例を次に示しgettext()
ます。
これを xgettext で処理して、翻訳者がさまざまなバージョンを作成するために使用できるメッセージ カタログ ファイルを生成できます。これらの追加ファイルをターゲット システムで処理して、ユーザーが好みの言語で対話できるようにすることができます。
代わりに、次のようなコードを書きたいと思います。
ビルド時に、引用符で囲まれた文字列が xgettext などのプログラムによって調べられ、ベース メッセージ カタログ ファイルが生成されます。 <<
引数付きの演算子はi18n::cout
、メッセージ カタログから使用するランタイム テキストをルックアップするためのキーとして文字列リテラルを取ります。
それはどこかに存在しますか?
c++ - 完全なC++i18n gettext()「helloworld」の例
完全なi18nhelloworldの例を探していgettext()
ます。G.MohantyによるGNUgettextを使用した母国語サポートのチュートリアルに基づいてスクリプトを開始しました。LinuxとG++を使用しています。
コード:
プログラムがコンパイルされ、テキストが抽出され、スペイン語のファイルが作成され、変更され、バイナリが作成されますが、hellogtは引き続き英語を表示します。トレースには、現在の作業ディレクトリでes_MXを探している証拠も、LC_MESSAGESディレクトリへの参照も示されていません。
linux - msginit 電子メール アドレス コマンド ライン引数?
msginit は電子メール アドレスの入力を求めます。コマンドライン引数などのプロンプトを表示せずに、使用するメールアドレスを msginit に伝える方法はありますか?
python - wxPythonアプリケーションを多言語化する
多言語を作成したいwxPythonで書かれたアプリケーションがあります。私たちのオプションは
- gettexthttp://docs.python.org/library/gettext.htmlを使用する
- すべてのUIテキストをmessages.pyファイルに分離し、それを使用してテキストを翻訳する
私は2番目に非常に傾いていますが、gettextの方法を使用してもメリットはありません。2番目の方法を使用すると、コード内ではなく1つの場所にすべてのメッセージを含めることができるため、メッセージを変更する必要がある場合は、コードを変更する必要はありません。 gettextの場合、messages.pyで定数に変換するのではなく、元のmsgをラップするだけなので、混乱するmsg-constantsがある可能性があります。
基本的に代わりに
おもう
より良いので、gettextの方法には利点があり、2番目の方法には欠点がありますか?そして第三の道はありますか?
編集:gettext言語ファイルもコードに結びついているようです。英語で同じでフランス語で異なる2つのメッセージが必要な場合はどうなりますか。たとえば、フランス語の場合、英語の異なるシナリオに対してより微妙な翻訳があります。
経験:私はすでに2番目の方法に進んでおり、すべてのアプリケーションがコードからUIテキストを抽出しようとする必要があると言わなければなりません。これにより、リファクタリングの機会が与えられ、UIがモデルに忍び寄り、UIテキストを改善できる場所を確認できます。メカニックは、コーダーに入力を与えません、そして私は維持するのがより難しいと思います。
また、テキストの名前(PRINT_PROGRESS_MSGなど)を作成しているときに、同じmsgの使用方法が少し異なり、1つの名前にマージできることを確認できます。これは、後でmsgを1回だけ変更する必要がある場合に役立ちます。
結論:gettextを使用する利点がまだわからず、自分のメッセージファイルを使用しています。しかし、私はgettextが有益である理由を少なくともいくつか説明する答えを選択しました。IMOの最終的な解決策は、両方の方法から最善を尽くすことです。つまり、gettextでラップされた自分のメッセージ識別子です。
php - プログラムですべてのメッセージ ID を .MO ファイルに一覧表示する簡単な方法はありますか?
PHP アプリケーションに必要なすべてのユーザー向け文字列を含む、大きな古い .po ファイルがあります。.po または .mo に格納されているすべての msgid 文字列のリストを取得するために使用できる PHP 関数があるかどうか知りたいです。
これを行う公開された PHP 関数は見当たりませんでした。似たようなことを知っている人はいますか、それとも .po ファイルを自分で手動で解析する必要がありますか?
これは私が最適に見たいものです:
c++ - ロケール es_MX は機能するのに es が機能しないのはなぜですか?
GNU gettext のウィキペディアのエントリは、ロケールが単なる言語「fr」である例を示しています。一方、i18n gettext() の「hello world」の例には、言語と国の両方を含むロケール値 " es_MX
" があります。es_MX
" " の例を "es" だけを使用するように変更しましたが、予想されるスペイン語ではなく英語のテキストが生成されます。
Controlling your locale with environment variablesによると:
GNU gettext だけが使用する環境変数 LANGUAGE ... 定義されている場合、LANGUAGE は LC_ALL、LC_MESSAGES、および LANG よりも優先されます。
英語ではなく、予想されるスペイン語のテキストを生成します。
しかし、これは「LANG=es」が機能しない理由を説明していません。
linux - ポーランド語テキストでの msgfmt "invalid multibyte sequence" エラー
完全な C++ i18n gettext() “hello world” の例を使用して、ロケールを " es_MX
"から " " に変更しpl_PL
、テキストを "hello, world!"から " " に変更しました。「無効な入力です。20 文字以上の文字列を入力してください。」ポーランド語の翻訳には、msgfmt からの「無効なマルチバイト シーケンス」エラーの原因となる文字「łąźó」がいくつか含まれています。翻訳されたテキストは Web ページからコピーされました。
utf8が問題だと思います。もしそうなら、代わりに何を使うべきですか?
linux - MIME タイプを設定するための xgettext、msginit、msgfmt シーケンスのコマンドまたはオプション?
ポーランド語テキストの msgfmt「無効なマルチバイト シーケンス」エラーは、テンプレート ファイルの MIME Content-Type 文字セットを手動で編集することで修正されます。MIME タイプを設定するための xgettext、msginit、msgfmt シーケンスのコマンドまたはオプションはありますか?