まあ、私はこのプラグインを使用していないが、かなり長い間を悩ませますが、同じことをしなければなりませんでした。私は初期化私Localizer
クラスで
<translations>
<translation id="hello_world"><![CDATA[Hello ##username##!]]></translation>
<translation id="how_are_you"><![CDATA[How are you?]]></translation>
</translations>
:
私は私の文字列を定義するXMLファイル(この例では、xml/en/content.xml
です):私は私のニーズのために次のことが最善の解決策だったことをfigueredこれらの翻訳を配列に保存します。 translate
関数は、smartyからID文字列を取得し、そのIDを翻訳で検索し、##string##
テキストを検索します。これらの##...##
はsmartyに既に割り当てられている変数に置き換えられます。
class Localizer {
private static $translations = array();
public static function init($language) {
$temp_content = simplexml_load_file('xml/' . $language . '/content.xml');
foreach ($temp_content as $key => $value){
self::$translations[(string)$value['id']] = (string)$value;
}
}
public static function translate($params, $name, $smarty) {
$translation = '';
if(! is_null($name) && array_key_exists($name, self::$translations)) {
// get variables in translation text
$translation = self::$translations[$name];
preg_match_all('/##([^#]+)##/i', $translation, $vars, PREG_SET_ORDER);
// replace with assigned smarty values
foreach($vars as $var) {
$translation = str_replace($var[0], $smarty->getTemplateVars($var[1]), $translation);
}
}
return $translation;
}
}
これで、どの機能を使用すべきかをsmartyに伝える必要があります。これはあなたのindex.php
次のようになります。
include('Localizer.class.php');
Localizer::init('en');
$smarty->registerPlugin('block', 'translate', array('Localizer', 'translate'), true);
翻訳を使用するには、まず、私は、ユーザー名を割り当てます。
$smarty->assign('username', $username);
テンプレートファイルで:
{translate}hello_world{/translate}
希望これは、挨拶を支援しますオーストリア:)
@Sascha Galley 本当にありがとう あなたの助け。それは素晴らしいです。しかし、あなたが話しているローカライザークラスについては、わかりません。スマートフォン全体を検索しました。ローカライザークラスはありません。あなたもそれで私を助けることができますか?別のプラグインを使用していますか?おそらくそれ? http://smarty.incutio.com/?page=LocalizerPlugin – Basti
@Bastiそのクラスは自分で構築します。答えを編集し、今すぐ明確になることを願っています。 –
@Sascha Galleyああ、大丈夫です。それは理にかなっている。私はとても愚かであることを本当に残念です。私はそれを実行させることはできません。私は今、次のようにしました: Smarty.class.phpと同じディレクトリにLocalizer.class.phpを作成しました。それは上記のコードを含んでいます。では、翻訳機能をどこに置くべきかわかりません。私はそれがgarantueする必要があります、テンプレートの機能がうまくいくだろうと思います。だからそれを行う方法? function.translation.phpに関数を置くことはできません。 Sry、それを取得していないため... – Basti