[Svn-src-all:3285] [version-2_12-multilang 22186] #1988 (国際化テンプレート:エスケープ処理) 現状コミット。
Seasoft
admin @ mail.ec-cube.net
2012年 12月 28日 (金) 22:39:21 JST
Subversion committed to /home/svn/open 22186
http://svn.ec-cube.net/open_trac/changeset/22186
┌────────────────────────────┐
│更新者 : Seasoft │
│更新日時: 2012-12-28 22:39:21 +0900 (金, 28 12月 2012)│
└────────────────────────────┘
Log:
--------------------------------------------------------
#1988 (国際化テンプレート:エスケープ処理) 現状コミット。
* ja.po は、data/Smarty/templates/admin/ownersstore/plugin.tpl に対応する部分のみ、局所的に変更しています。
* data/Smarty/templates/admin/ownersstore/plugin.tpl にコメントを記載している「案1」及び「案2」の方向性については協議中。
* 上記以外では、po ファイルの改修が終わるまで、HTML エスケープが過剰に行なわれます。(主に、入力必須マークの出力が正しく行なわれないといった状況が生じます。)
Changed: [U:修正,A:追加,D:削除]
--------------------------------------------------------
U branches/version-2_12-multilang/data/Smarty/templates/admin/ownersstore/plugin.tpl
U branches/version-2_12-multilang/data/class/helper/SC_Helper_Locale.php
U branches/version-2_12-multilang/data/locales/ja.mo
U branches/version-2_12-multilang/data/locales/ja.po
U branches/version-2_12-multilang/data/smarty_extends/function.t.php
変更: branches/version-2_12-multilang/data/Smarty/templates/admin/ownersstore/plugin.tpl
===================================================================
--- branches/version-2_12-multilang/data/Smarty/templates/admin/ownersstore/plugin.tpl 2012-12-28 13:08:43 UTC (rev 22185)
+++ branches/version-2_12-multilang/data/Smarty/templates/admin/ownersstore/plugin.tpl 2012-12-28 13:39:21 UTC (rev 22186)
@@ -33,12 +33,12 @@
var mode = event.target.name;
if(mode === 'disable') {
- result = window.confirm('<!--{t string="tpl_458"}-->');
+ result = window.confirm('<!--{t string="tpl_458" escape="j"}-->');
if(result === false) {
$(event.target).attr("checked", "checked");
}
} else if(mode === 'enable') {
- result = window.confirm('<!--{t string="tpl_459"}-->');
+ result = window.confirm('<!--{t string="tpl_459" escape="j"}-->');
if(result === false) {
$(event.target).attr("checked", "");
}
@@ -54,7 +54,7 @@
* 通信エラー表示.
*/
function remoteException(XMLHttpRequest, textStatus, errorThrown) {
- alert('<!--{t string="tpl_460"}-->');
+ alert('<!--{t string="tpl_460" escape="j"}-->');
}
/**
@@ -79,7 +79,7 @@
* インストール
*/
function install() {
- if (window.confirm('<!--{t string="tpl_461" kaigyo_escape=true}-->')){
+ if (window.confirm('<!--{t string="tpl_461" escape="j"}-->')){
fnModeSubmit('install','','');
}
}
@@ -88,7 +88,7 @@
* アンインストール(削除)
*/
function uninstall(plugin_id, plugin_code) {
- if (window.confirm('<!--{t string="tpl_462"}-->')){
+ if (window.confirm('<!--{t string="tpl_462" escape="j"}-->')){
fnSetFormValue('plugin_id', plugin_id);
fnModeSubmit('uninstall', 'plugin_code', plugin_code);
}
@@ -98,7 +98,7 @@
* アップデート処理
*/
function update(plugin_id, plugin_code) {
- if (window.confirm('<!--{t string="tpl_463"}-->')){
+ if (window.confirm('<!--{t string="tpl_463" escape="j"}-->')){
removeUpdateFile('update_file_' + plugin_id);
fnSetFormValue('plugin_id', plugin_id);
fnModeSubmit('update','plugin_code', plugin_code);
@@ -127,8 +127,9 @@
<div id="system" class="contents-main">
<h2><!--{t string="tpl_464"}--></h2>
<table class="form">
+ <!--{* 案1 *}-->
<tr>
- <th><!--{t string="tpl_465"}--></th>
+ <th><!--{t string="tpl_465"}--> <!--{t string="<require>"}--></th>
<td>
<!--{assign var=key value="plugin_file"}-->
<span class="attention"><!--{$arrErr[$key]}--></span>
@@ -136,6 +137,16 @@
<a class="btn-action" href="javascript:;" onclick="install(); return false;"><span class="btn-next"><!--{t string="tpl_466"}--></span></a>
</td>
</tr>
+ <!--{* 案2 *}-->
+ <tr>
+ <th><!--{t string="tpl_465"}--> <span class='attention'><!--{t string="require_mark"}--></span></th>
+ <td>
+ <!--{assign var=key value="plugin_file"}-->
+ <span class="attention"><!--{$arrErr[$key]}--></span>
+ <input type="file" name="<!--{ $key }-->" class="box45" size="43" style="<!--{$arrErr[$key]|sfGetErrorColor}--> <!--{if $arrErr[$key]}--> background-color:<!--{$smarty.const.ERR_COLOR|h}--><!--{/if}-->">
+ <a class="btn-action" href="javascript:;" onclick="install(); return false;"><span class="btn-next"><!--{t string="tpl_466"}--></span></a>
+ </td>
+ </tr>
</table>
<!--▼プラグイン一覧ここから-->
変更: branches/version-2_12-multilang/data/class/helper/SC_Helper_Locale.php
===================================================================
--- branches/version-2_12-multilang/data/class/helper/SC_Helper_Locale.php 2012-12-28 13:08:43 UTC (rev 22185)
+++ branches/version-2_12-multilang/data/class/helper/SC_Helper_Locale.php 2012-12-28 13:39:21 UTC (rev 22186)
@@ -69,19 +69,112 @@
$device_type_id = $options['device_type_id'];
}
+ $return = $string;
// Get string list of specified language.
- if ($lang_code == 'en') {
- return $string;
- } else {
+ if ($lang_code != 'en') {
$translations = SC_Helper_Locale_Ex::$_instance->get_translations($lang_code, $device_type_id);
// Whether a string which corresponding with alias is exist.
- if (isset($translations[$string])) {
- return $translations[$string];
+ if (isset($translations[$return])) {
+ $return = $translations[$return];
}
- else {
- return $string;
+ }
+
+ $esc_types = $options['escape'];
+ if (is_null($esc_types) && $string[0] !== '<') {
+ $esc_types = 'h';
+ }
+ foreach (explode(',', $esc_types) as $esc_type) {
+ switch ($esc_type) {
+ case 'h':
+ case 'html':
+ $return = htmlspecialchars($return, ENT_QUOTES);
+ break;
+
+ case 'j':
+ case 'javascript':
+ // escape quotes and backslashes, newlines, etc.
+ $return = strtr($return, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/'));
+ break;
+
+ case 'nl2br':
+ $return = nl2br($return, true);
+ break;
+
+ case '':
+ case 'none':
+ break;
+
+ case 'htmlall':
+ $return = htmlentities($return, ENT_QUOTES);
+ break;
+
+ case 'u':
+ case 'url':
+ $return = rawurlencode($return);
+ break;
+
+ case 'urlpathinfo':
+ $return = str_replace('%2F','/',rawurlencode($return));
+ break;
+
+ case 'quotes':
+ // escape unescaped single quotes
+ $return = preg_replace("%(?<!\\\\)'%", "\\'", $return);
+ break;
+
+ case 'hex':
+ // escape every character into hex
+ $text = '';
+ for ($x=0; $x < strlen($return); $x++) {
+ $text .= '%' . bin2hex($return[$x]);
+ }
+ $return = $text;
+ break;
+
+ case 'hexentity':
+ $text = '';
+ for ($x=0; $x < strlen($return); $x++) {
+ $text .= '&#x' . bin2hex($return[$x]) . ';';
+ }
+ $return = $text;
+ break;
+
+ case 'decentity':
+ $text = '';
+ for ($x=0; $x < strlen($return); $x++) {
+ $text .= '&#' . ord($return[$x]) . ';';
+ }
+ $return = $text;
+ break;
+
+ case 'mail':
+ // safe way to display e-mail address on a web page
+ $return = str_replace(array('@', '.'),array(' [AT] ', ' [DOT] '), $return);
+ break;
+
+ case 'nonstd':
+ // escape non-standard chars, such as ms document quotes
+ $_res = '';
+ for($_i = 0, $_len = strlen($return); $_i < $_len; $_i++) {
+ $_ord = ord(substr($return, $_i, 1));
+ // non-standard char, escape it
+ if($_ord >= 126){
+ $_res .= '&#' . $_ord . ';';
+ }
+ else {
+ $_res .= substr($return, $_i, 1);
+ }
+ }
+ $return = $_res;
+ break;
+
+ default:
+ trigger_error('unknown escape type. ' . var_export(func_get_args(), true), E_USER_WARNING);
+ break;
}
}
+
+ return $return;
}
/**
変更: branches/version-2_12-multilang/data/locales/ja.mo
===================================================================
(バイナリファイルが異なっています)
変更: branches/version-2_12-multilang/data/locales/ja.po
===================================================================
--- branches/version-2_12-multilang/data/locales/ja.po 2012-12-28 13:08:43 UTC (rev 22185)
+++ branches/version-2_12-multilang/data/locales/ja.po 2012-12-28 13:39:21 UTC (rev 22186)
@@ -2,7 +2,7 @@
msgstr ""
"Project-Id-Version: EC-CUBE Core\n"
"POT-Creation-Date: 2012-05-07 13T_39+0900\n"
-"PO-Revision-Date: 2012-12-27 14:19+0900\n"
+"PO-Revision-Date: 2012-12-28 22:26+0900\n"
"Last-Translator: MATSUDA Terutaka <matsudaterutaka @ gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -3529,8 +3529,7 @@
msgid "SC_Utils_001"
msgstr ""
-">> /install/T_FIELD は、インストール完了後にファイルを削除してくださ"
-"い。"
+">> /install/T_FIELD は、インストール完了後にファイルを削除してください。"
msgid "SC_Utils_002"
msgstr "前方互換用メソッドが使用されました。"
@@ -5021,7 +5020,8 @@
msgid "tpl_462"
msgstr ""
-"一度削除したデータは元に戻せません。\\nプラグインを削除しても宜しいですか?"
+"一度削除したデータは元に戻せません。\n"
+"プラグインを削除しても宜しいですか?"
msgid "tpl_463"
msgstr "プラグインをアップデートしても宜しいですか?"
@@ -5030,7 +5030,7 @@
msgstr "プラグイン登録"
msgid "tpl_465"
-msgstr "プラグイン<span class='attention'> *</span>"
+msgstr "プラグイン"
msgid "tpl_466"
msgstr "インストール"
@@ -5875,3 +5875,9 @@
msgid "pt_suffix"
msgstr "pt"
+
+msgid "<require>"
+msgstr "<span class='attention'>*</span>"
+
+msgid "require_mark"
+msgstr "*"
変更: branches/version-2_12-multilang/data/smarty_extends/function.t.php
===================================================================
--- branches/version-2_12-multilang/data/smarty_extends/function.t.php 2012-12-28 13:08:43 UTC (rev 22185)
+++ branches/version-2_12-multilang/data/smarty_extends/function.t.php 2012-12-28 13:39:21 UTC (rev 22186)
@@ -44,6 +44,11 @@
$options['device_type_id'] = $params['device_type_id'];
unset($params['device_type_id']);
}
+ // エスケープの指定がある場合、オプションに移す
+ if (isset($params['escape'])) {
+ $options['escape'] = $params['escape'];
+ unset($params['escape']);
+ }
return t($string, $params, $options);
}
Svn-src-all メーリングリストの案内