source: branches/version-2_12-multilang/data/smarty_extends/function.t.php @ 22226

Revision 22226, 1.6 KB checked in by Seasoft, 11 years ago (diff)

#1988 (国際化テンプレート:エスケープ処理) 現状コミット。

  • PHP 関数の t() の動作に影響が及んでいたので回避。
  • 文字列エスケープ処理を分離。SC_Helper_Locale#escape
  • デフォルトのエスケープに nl2br を追加。
  • 吉本様からご指示いただきました仕様を適用。
    後述されている仕様での実装をお願いしたく思います。
    懸念されています「po の中で HTML エスケープを意識する」といった必要が生じる箇所は
    それほど多くない事、現時点ではβ版リリースという事を踏まえて
    今後修正を掛けていければと考えております。
    取り急ぎ最小限の実装で対応できればと考えておりますので
    懸念は残す形となりますが、やはり以下の様な実装で対応できればと思います。
    <!--{t string="tpl_465" escape="none"}-->
    <!--{t string="tpl_465"}-->
    
    escape=""は「指定なし」と同様の振る舞いの方が分かりやすいかと思います。
    
Line 
1<?php
2/**
3 * Smarty plugin
4 * @package Smarty
5 * @subpackage plugins
6 */
7
8
9/**
10 * Smarty {t} plugin
11 *
12 * Type:     function<br>
13 * Name:     t<br>
14 * Purpose:  replace message alias to appropriate strings
15 * @author pineray 松田光貴 <matsudaterutaka at gmail dot com>
16 * @param array
17 * @param Smarty
18 * @return string
19 */
20function smarty_function_t($params, &$smarty) {
21    // 多言語対応用の関数が定義されていなければエラーを出力
22    if (!function_exists('t')) {
23        $smarty->_trigger_fatal_error("[plugin] function 't' is not defined");
24        return;
25    }
26
27    // エイリアスが無ければエラーを出力
28    if (empty($params['string'])) {
29        $smarty->_trigger_fatal_error("[plugin] parameter 'string' cannot be empty");
30        return;
31    }
32    $string = $params['string'];
33    unset($params['string']);
34
35    // オプション用の配列
36    $options = array();
37    // 言語コードの指定があればオプションにセット
38    if (!empty($params['lang_code'])) {
39        $options['lang_code'] = $params['lang_code'];
40        unset($params['lang_code']);
41    }
42    // 機種の指定があればオプションにセット
43    if (!empty($params['device_type_id'])) {
44        $options['device_type_id'] = $params['device_type_id'];
45        unset($params['device_type_id']);
46    }
47    // エスケープの指定がある場合、オプションに移す
48    if (strlen($params['escape']) >= 1) {
49        $options['escape'] = explode(',', $params['escape']);
50    } else {
51        $options['escape'] = array('h', 'nl2br');
52    }
53    unset($params['escape']);
54
55    return t($string, $params, $options);
56}
Note: See TracBrowser for help on using the repository browser.