問題タブ [xgettext]
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.
python - 複数形を .pot ファイルに生成する
Python プログラムを国際化していますが、複数形を .pot ファイルに入れることができません。複数の翻訳が必要な文字列を _pl() でマークしました。
self.write_info(_pl("%(num)d track checked", "%(num)d tracks checked",
song_obj.song_count) % {"num" : song_obj.song_count})
それから私は実行しています:
xgettext --language=Python --keyword=_pl --output=output.pot *.py
最初の (単数) 文字列のみが pot ファイルに生成されます。
javascript - Poedit 正規表現ベースのパーサー?
JS ファイルでは、Gettext の翻訳に次の形式を使用します。
この JS ファイルは PHP を使用して解析され、解析された文字列は Zend Framework Zend_Translate を介して翻訳されます。生成された JS は次のようになります。
翻訳対象の文字列を抽出し、PHP ファイルを翻訳するために Poedit を使用していますが、非常にうまく機能します。Poedit
を使用して翻訳する文字列を解析する方法はありますか?'!t[...]'
問題を解決するのは、正規表現ベースの Poedit パーサーのようなものです。そのようなパーサーはありますか?
別の方法として、言語 PHP をパラメーターとして xgettext に基づいてソース コード パーサーを定義することもできます (xgettext は .js ファイルを認識せず、それらを C ファイルとして扱うため、これを行う必要があります)。次に、JS ファイルで次の形式を使用します。
言うまでもなく、Poedit で文字列を解析できるようにするためだけに、あちこちで php のように見えるコードを使用するのは非常にクールではありません。
language-agnostic - メッセージ文字列を翻訳する場所 - ビューまたはモデル内?
多言語 (PHP) アプリケーションがあり、i18n に gettext を使用しています。バックエンド/モデルには、printf() のメッセージまたはメッセージ形式を返すクラスがいくつかあります。
xgettext を使用して、翻訳したい文字列を抽出します。
フロントエンド/ビューに gettext 関数 T_() を適用します - これはそれが属する場所のようです。これまでのところ、T_() 呼び出しからバックエンドをきれいに保ちました。このようにして、メッセージの単体テストも行うことができます。
したがって、フロントエンドには次のようなものがあります
また
これにより、MyModel クラスにダミーの T_("my message %s to translate") 呼び出しを配置しない限り、xgettext を適用して文字列を抽出することができなくなります。
したがって、これはより一般的な質問につながります。
バックエンド クラスで翻訳を適用しますか。どこに翻訳を適用し、翻訳する必要がある文字列をどのように追跡しますか?
(質問: poedit 動的 gettext の回避策を認識しています。)
python - 「django-admin.py makemessages」または xgettext 呼び出しのバグ? -> "警告: 終了していない文字列"
django-admin.py makemessagesは、非常に長い文字列がラップされている場合、「警告: 終了していない文字列」というエラーで停止します:
これらの文字列は翻訳する必要さえありません。たとえば、SQL クエリ文字列です。文字列を連結すると問題はなくなりますが、結果が見苦しく、結合に時間がかかります...
こんなお悩みをお持ちの方はいらっしゃいませんか?それを修正する方法を見つけましたか?
関連するツールの次のバージョンがあります。
xgettext-0.17、gettext-0.17、django-1.0.2、python-2.6.2
この問題に関するチケットがありましたが、おそらくコンポーネント バージョンの一部の組み合わせでのみエラーが表示されるため、クローズされました。
編集: 問題の原因が見つかりました- xgettext は警告メッセージを sterr に出力し、django はそれらを致命的なエラーと見なして終了します。
xgettext 呼び出しの戻りステータスは 0 - 「成功」です。ジャンゴはそれを成功として認識し、警告のために終了しないはずだと思います。
興味深いことに、xgettext はバックスラッシュでラップされた文字列を翻訳する必要がある場合でも抽出しますが、stderr ( 「終了していない文字列」 ) と .po ファイル ( 「国際化されたメッセージには `\r' エスケープ シーケンスを含めないでください」 )で警告を出します。
xgettext 呼び出しは次のとおりです。
django/core/management/commands/makemessages.py から呼び出されます
xml - XSLT の I18n (または XSLT の C++ の gettext() および xgettext とは)?
完全な C++ i18n gettext() の「hello world」の例は、gettext() を使用して C++ プログラムでメッセージを処理する標準的な方法を示しています。メッセージ カタログは、xgettext、msginit、および msgfmt を使用して C++ ソース コードから直接作成されたポータブル オブジェクト テンプレート ファイルに基づいて、ポータブル オブジェクト ファイルに格納されます。XSLT でメッセージを処理するための対応する方法は何ですか?
具体的には、C++ の hello-world コードが i18n をサポートするようにするには、2 つのインクルードを追加し、いくつかのセットアップ関数を呼び出し、gettext() への呼び出しで文字列をラップします。
次に、英語のテキストがソース プログラムから抽出され、ユーティリティ プログラム (xgettext、msginit、および msgfmt) を使用してランタイム プログラムで使用するためのマシン オブジェクト メッセージ カタログ ファイルを作成する翻訳者が使用するために、ポータブル オブジェクト テンプレートに変換されます。最後に、プログラムが呼び出されると、ランタイム言語をスペイン語として識別するための Linux シェル コマンドが表示されます。
hello-world プログラムを実行する主な目的は、すべてのシステム部分を接続して、事実上役に立たない例を機能させることです。そのため、C++ の例が Linux 環境での C++ を示しているように、私は同じことを探していますが、代わりに XSLT を探しています。
- C++ の例には、hellogt にリンクされた一連のインクルード ファイルとオブジェクト ファイルがあります。setlocale、bindtextdomain、および textdomain の機能を提供する XSLT のコードはありますか? コードはユーザーのランタイム言語にどのように接続しますか?
- gettext() のように、メッセージ カタログ ファイルを介して英語のテキストからランタイム変換を提供する XSLT コードはありますか?
- ソース XML ファイルから英語テキストを抽出して翻訳者が使用するためのユーティリティ プログラムと、xgettext、msginit、msgfmt などの実行時に使用可能なメッセージ カタログ ファイルに結果を変換するプログラムはありますか?
- ユーザー ランタイム言語の識別はどのように指定されますか?
たとえば、XSLT を使用して XML を HTML に処理する Javascript アプリケーションEmleがあります。メッセージは、言語固有の XML ファイルのアプリケーション固有のコレクションで定義されます。これらは、アプリケーション固有の XSLT コードを使用して抽出されます。これは #2 に言えますが、この方法は、 LaunchPadが提供するような翻訳サービスを利用できるようには見えません。Emle XSLT ファイルで使用されるEmle 英語メッセージ ファイルの例
c++ - --extract-all を指定して xgettextt を使用して複数形を処理する
--extract-all
with の使用xgettext
は、複数形では機能しません。I18n C++ hello worldへの回答を複数形で C++ コードとして使用すると、xgettext
.
--extract-all
複数形の処理を含め、期待どおりに動作しないもの:
をコマンド ラインに追加する--extract-all
と、結果の POT ファイルは追加されません。代わりに、別のエントリがあります。
の最初の使用例で示したように、like 関数に直接渡される文字列リテラルは、gettext()
複数のメッセージを適切に処理しますxgettext
。
同様の関数のいずれかに直接渡されない文字列リテラルの場合、 withgettext()
オプションを使用して、POT ファイルにエントリを生成できます。--extract-all
xgettext
複数のエントリを生成するために like 関数に 直接gettext()
渡される複数の文字列リテラルも含むソース内の like 関数に直接渡されない文字列リテラルの処理をどのように取得しますか?gettext()
msgid_plural
msgstr[]
php - xgettextとgettext
少し質問があります:
私はgettextが何であるかを知っています。私は彼らがxgettextに言及し、2つの違いが何であるかについて興味を持ったいくつかの投稿を読みました。
Windowsにxgettextをインストールするにはどうすればよいですか?
そして最後に、ライブラリphp-gettext http://savannah.nongnu.org/projects/php-gettext/ (これは通常PHPには付属していません)をインストールする方法についてのチュートリアルはありますか?私はそれについて読みました記事にありますが、Windowsで動作させる方法がわかりません。問題は、変更を加えるときに、PHPに付属するgettextで新しいデータを表示するためにApacheを再起動する必要がある場合があるため(ただし、ライブラリでは再起動する必要はありません)、開発にライブラリを使用したかったのです。 。ありがとう!
gettext - GNU Autotoolsを使用しているプロジェクトで、xgettextを起動するタスクはありますか?
概要 :
GNUAutotoolsを使用したプロジェクトがあります。ポットファイルがあります。更新する必要があります。xgettextを実行する魔法の「make」タスクはありますか(私は怠け者ですか?)
冗長バージョン:
やあ
GNUautotoolsとgettextを使用してプロジェクトをセットアップしようとしています。
私は「怠惰な」パスをたどろうとしています(つまり、configure.ac、Makefile.amなどを記述し、ツールに残りを可能な限り生成させます)。
パッケージでgettextizeを1回使用したので、package.potファイルを作成し、fr.poファイルを派生させました(フランス語に翻訳しようとしています)。
コードを翻訳することはできませんでしたが、コードが適切な場所になかったことが原因である可能性があることがわかりました。翻訳された文字列はmainではなくlibにあり、この場合に何をしなければならないかについてのドキュメントはかなり不明確です。私のメインがlib内の関数を呼び出し、libからの関数が_()を使用している場合。この場合、dgettextのgettextを使用する必要がありますか?私のlibは組織化のためにここにあるので、同じドメインを使用しても問題ありません(アプリ全体で1つのpackage.potファイルのみ)。
そこで、もっと簡単なことを試すために、文字列をメインに移動しました(今のところ、これは実際には単なるHello Worldです)。したがって、少なくとも、文字列の位置が変更されたことを認識するために、package.potファイルを更新する必要があります。この場合、xgettextを手動で使用しますか(複数のファイルがある場合は、すべての興味深いcppファイルのリストを苦痛に渡します。これはお尻の痛みになります)、または「何でも作成」タスクがどこかにありますか?実行できますか?
これはばかげているように見えるかもしれませんが、私はそれを見つけることができませんでした。
また、私のコードが翻訳されていない理由( http://www.gnu.org/software/gettext/FAQ.html#integrating_noopにないもの)を見つけるためのヘルプは大歓迎です!
ありがとう
PH
php - 再帰的なxgettext?
.po
xgettext を使用して PHP ファイルを単一のコマンドで再帰的にコンパイルするにはどうすればよいですか?
私のPHPファイルは階層に存在し、ストレートxgettext
コマンドは再帰的に掘り下げていないようです.