問題タブ [php-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.
php - PHP の Gettext では setlocale(LC_MESSAGES, NULL) を呼び出す必要があります
Ubuntu で PHP 5.5.9 を使用すると、すべてが正しくセットアップされているにもかかわらず、gettext が機能しません。
gettext の設定に使用する行は次のとおりです。
これには、必要なものがすべて含まれている必要があります。しかし、gettext は常にデフォルトのロケールの文字列 (渡された文字列) を返し、正しい翻訳を返すことはありません。
Callinglocale -a
には必要なすべての言語もリストされているため、これも正しく設定されています。
phpinfo()
gettext (およびintl
拡張機能) が正しくインストールされていることを証明します。
もちろん、Ubuntuは再起動されています。
最後に、指定されたディレクトリには、gettext に必要な翻訳ファイルも含まれています。
要するに、すべてが正しく設定されているように見えますが、うまくいきません。
setlocale(LC_MESSAGES, NULL);
ただし、への呼び出しの前に追加するとsetlocale(LC_MESSAGES, 'es_ES');
、 gettext が突然機能します。
誰かがこれを説明できますか?OS と PHP のバージョンは最新ではありませんが、gettext がこのスタックで動作しなくなるバグについては知りません。
解決策は汚いハックのように感じられ、確かに私が安心して頼りにできるものではありません.
php - php-gettext より良い使い方
ネイティブの php gettext 拡張機能の代わりに php-gettext を使用しています。大量のテキストを翻訳するためのより良い方法があるかどうか疑問に思っていました. たとえば、次のコードがあります。
がたくさんありますが<?php print T_("...") ?>
、効率的ではないようです。そして私のmessages.poには、これがあります:
そして、これよりもはるかに多くの情報を含むページがたくさんあり、すべてのページでこれを行うのは非常に面倒です. このようにしなければならない場合、何日もかかり、正気を失うでしょう。より良い方法はありますか?
php - テキストドメインなしの言語のディレクトリを持つPHP gettext
PHP の gettext() を使用して、アプリケーションを自動的に翻訳したいと考えています。しかし、私にとって、それは本当のやり過ぎlocales/de_DE/LC_ALL/$app_name.mo
です。WordPress のように、 onlylocales/de_DE.mo
のようなものが必要です。このように使用するように gettext を構成するにはどうすればよいですか?
php - wamp で動作するように gettext を設定する
ここでは、この種の問題は見つかりませんでした。ウェブサイトを英語とセルビア語にローカライズしたいと考えています。
英語では機能していますが、セルビア語では機能しません。私のディレクトリ構造は次のようになります(WAMPで作業中):
poedit で作成されたすべての .mo および .po ファイル。sr_RS フォルダーにある messages.po ファイルは次のとおりです。
問題は、このコードでセルビア語を選択したときです:
翻訳されたものではなく、デフォルトの文字列がエコーされます。
助けが必要です!:)
utf-8 - Gettext がすべての文字列を翻訳しない
.mo ファイル (PoEdit を使用) で PHP Gettext を使用して、フランス語 (fr_FR.UTF-8) から英語 (en_US.UTF-8) に翻訳しています。UTF-8 で正しく翻訳されていないアクセントについて話しているのではなく、一部の文字列全体が翻訳されていないだけです。
すべての PHP ファイルから翻訳するフランス語の文字列を抽出しました - _("stringtotranslate") - シェル スクリプトのおかげです:
すべての文字列が正しく生成されたdefault.potが生成されました。欠落しているものはありません。その .pot ファイルから、英語版の default.po ファイルを作成しました。その .po は UTF-8 であり、必要な PHP ファイルも UTF-8 です (BOM なし)。
キャッシュに問題はありません。変更ごとに .mo ファイルに異なる名前を付けます ('default_' + filemtime)。
私が気づくことができるもの:
- utf-8 文字を含まない短い文字列が翻訳されます。
- 長い文字列または utf-8 文字 (フランス語のアクセント) を含むものは翻訳されません...しかし、アクセントのない短い文字列の例を見つけましたが、翻訳もされていません... (他の例は見つかりませんでした)。
サーバー (Apache 1.3.37、PHP 4.4.4、--with-gettext) に従ってロケールを設定しました。ロケールは、ウェブサイトでクリックされたフラグに応じて動的です。英語版は次のとおりです。
すでに述べたように、一部の文字列は正しく英語に翻訳されていますが、すべての文字列が正しく翻訳されているわけではありません。
英語版のウェブサイトはこちらです: http://librairiedescarres.com/2015/en/
.po ファイルの一部を次に示します。
私は多くの解決策を試しましたが、誰もうまくいきません:
- 「en_US」、「en_US.utf8」、「en_US.utf-8」などの他のロケールを試してください...
- putenv('LANG=fra'), putenv('LC_ALL=fra')...
- Notepad++ を使用して、生成された .mo ファイルの UTF-8 エンコーディングを強制します。
解決策はありますか?Apache、PHP、または Gettext に問題はありますか?