poedit回避策のための動的gettext
-
22-08-2019 - |
質問
私の使用を開始したgettextのための翻訳テキストメッセージを送っているユーザーです。を使用していpoedit編集者として、私は、こうした苦しむ動的メッセージ
例えば、私のようなログインしたいことが分かった変数を知るタイプのエラーになります。
$this->translate('page-error-' . $error);
私自動更新にかかpoeditことが読みよう"ページ-エラー-".僕はファイルがたダミーの電話を翻訳手法の可能なすべてのキーについての追加マpoeditが自動更新中です。
もちろん、私を含めた時のことです。いてきちゃいます。
彼のアイデア
解決
はありません - エディタ(とgettext
ツール)プログラムを実行していない、あなたのソースを読んでいるので、これは、不可能です。あなたは、ダミーのコールを維持するか、翻訳を自分でファイルにキーを追加する必要があります。
他のヒント
は、
のような何かをしようとしています$this->translate(sprintf('page-error-%s', $error));
同じ問題に遭遇しました。
たとえば私は持っています
PHPで
//Gives FORM_HEADER_ADD or FORM_HEADER_EDIT
echo $this->translate('FORM_HEADER_' . strtoupper($this->data));
poedit と同期すると、コード内で (生成された) 識別子ではない「FORM_HEADER_」が選択されます。
そこで、Poedit に完全な識別子を与える問題を修正する必要がありました。PHP で次のことを実行して解決しました。
echo ($this->data === 'add') ? $this->translate('FORM_HEADER_ADD') : $this->translate('FORM_HEADER_EDIT');
アップデート!
私はこの問題を調べ続けました。そして私は現在、ソースからのインポートをあきらめました。より良い解決策が見つかるまで、これを続ける方法です
- アプリケーションを構築し、できるだけ多くの静的識別子を使用します。
未翻訳 (動的) 識別子のログを有効にする
protected function _initMyTranslate(){ $date = new Zend_Date(); $fileName = sprintf('/../logs/translation_%1$s.log', $date->toString('dd-MM')); $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . $fileName); $log = new Zend_Log($writer); // get the translate resource from the ini file and fire it up $resource = $this->getPluginResource('translate'); $translate = $resource->getTranslate(); // add the log to the translate $translate->setOptions( array( 'log' => $log, 'logUntranslated' => true ) ); // return the translate to get it in the registry and so on return $translate; }
Poedit を使用してソースと同期し、見つかった文字列を翻訳します。
- テスト/デバッグ段階で、ログに未翻訳の文字列がないか確認してください。
未翻訳の文字列を .po ファイルに追加します。
msgid "IDENTIFIER" msgstr "TRANSLATION STRING"
po ファイルを開いて保存し、mo ファイルを作成します (ソースと同期しないと、すべてが失われます)。
アップデート2。
私は現在、テキスト エディター (gedit/notepad) を使用して、手動識別子用に別のファイルを使用しています。今、私には2つのファイルがあります:
- poedit によって自動生成される <言語>.po という名前
- <言語>_manual.po という名前の手動で編集したファイル
言語ディレクトリ内のすべてのファイルをスキャンするように application.ini で翻訳を設定しました
resources.translate.adapter = gettext
resources.translate.content = APPLICATION_PATH "/../library/languages/"
resources.translate.locale = auto ;use en to force english or nl for dutch..etc
resources.translate.scan = directory
resources.translate.options.disableNotices = false
poedit で別の言語に翻訳したい場合は、POT ファイルからファイル -> 新しいカタログを実行し、手動で追加した文字列の翻訳を開始します。
とした場合の有限数が誤差を追加することができます一部ダミーコード内 if (false)
状態、唯一の目的はPoEditの最新の翻訳提案があります。
例えば:
if (false) {
_('role_visitor');
_('role_hiker_reader');
_('role_hiker');
_('role_translator');
_('role_proofreader');
_('role_moderator');
_('role_moderator_2');
_('role_moderator_3');
_('role_admin');
}
その後翻訳:
$translated_role = _('role_' . $role);