2016-08-10 30 views
0

空间,我努力使这项工作JSON的Json访问钥匙插入gulp-html-i18n不能与国际一饮而尽模块

"test": [ 
    { 
     "reg1": "Korea", 
     "reg2 test": "222", 
     "reg3 name": "name2", 
    }, 
    { 
     "reg1": "Japan", 
     "reg2 test": "223", 
     "reg3 name": "name3", 
    } 
    ], 

在HTML我做

${{filename.test.0.reg1}}$ 

和它的作品,但是当我尝试下面的任何替代方案时,都没有工作。有没有办法做到这一点,而无需更改json?

${{filename.test.0.reg2 test}}$ 
${{filename.test.0.['reg2 test']}}$ 
${{filename.test.0.[reg2 test]}}$ 

回答

1

默认情况下gulp-html-i18n使用一个简单的基于正则表达式引擎,以便与您在JSON定义字符串替换${{ }}$占位符。

用于识别占位符的正则表达式如下:

/\${{ ?([\w-.]+) ?}}\$/g 

[Explanation]

正如你可以看到这仅允许在占位符的单个前导/尾随空间。前导/尾随空间不被解释为属性键的一部分。

如果你想要空间属性键你需要一个不同的正则表达式。以下正则表达式允许您在属性中使用空格。前/后间隔仍然忽略,不被解释为属性键的一部分:

/\${{ ?([\w-. ]+?) ?}}\$/ 

[Explanation]

你可以告诉gulp-html-i18n使用这个表达式与langRegExp option

gulp.task('default', function() { 
    return gulp.src('index.html') 
    .pipe(i18n({ 
     langDir: './lang', 
     langRegExp: /\${{ ?([\w-. ]+?) ?}}\$/g 
    })) 
    .pipe(gulp.dest('dist')); 
}); 

然后在你的HTML中,你可以使用像这样的占位符:

${{filename.test.0.reg2 test}}$ 
${{ filename.test.0.reg2 test }}$ 
${{filename.test.0.reg1}}$ 
${{ filename.test.0.reg1 }}$ 

这应该会产生以下输出:

222 
222 
Korea 
Korea 
+0

很好的回答!非常感谢你。无论如何,你知道如何从json翻译文件中获取整数吗?现在我只能得到字符串。 –

+1

你不能,[仅字符串](https://github.com/webyom/gulp-html-i18n/blob/3597969/lib/index.js#L71),至少使用默认的''正则表达式'''发动机。你可以尝试'renderEngine:“mustache”'这将使用[mustache模板](https://github.com/mustache/mustache)。然而占位符语法不同。 –

+0

是的,这就是我的想法。再次感谢! –

0

你必须用方括号[]来存取带空格的键。当你使用的时候,你不需要使用.。因此,它可以写成

${{filename.test[0]['reg2 test']}}$ 

> a=[{test:"hello"},{"test str":"world"}] 
> a[1]["test str"] 
"world" 
+0

恐怕这种表示法不适用于我正在使用的i18n模块。 –