我有一个需要本地化的javascript代码,即
function js_proc() {
var some_data = 'this text needs to be translated dynamically at runtime';
}
所以我重写了这样:
function js_proc() {
var some_data = <?php echo $this->lang->line('some_data_id'); ?>;
}
在视图中,我写了这样的js链接:
<script type="text/javascript" src="www.domain.com/codeigniter/get_js/file-1/"></script>
调用控制器中的函数get_js()。想法是让get_js()函数读取js文件并翻译语言字符串......
有很多js字符串需要翻译,所以我不能将every string
作为变量传递。理想情况下,我想通过codeigniter语言文件来完成这项工作。
我的问题是:有没有办法解析js文件中的php部分&amp;执行(=翻译)他们?即
class App extends CI_Controller
{
function get_js {
$content = file_get_contents($js_file);
echo parse_php($content);
}
...
}
谢谢!
答案 0 :(得分:4)
根据语言文件的大小,允许javascript访问整个语言数组的快捷方法可能是将数组加载到全局javascript数组中;
<script>
var globalLang = <?php echo json_encode($this->lang->language); ?>;
</script>
然后在你的javascript中访问;
globalLang['some_lang_key']
答案 1 :(得分:2)
我不太清楚你的意思是“有太多的js字符串需要翻译,所以我不能将每个字符串作为一个变量传递”,但是如果你正在寻找一些自动解析,这就赢了没帮忙。
但这可能对其他人有所帮助,所以就这样了。
对于理想情况,我使用如下系统:
在我看来,我使用codeigniter语言支持将本地化添加为JavaScript全局变量。类似的东西:
<script type="text/javascript">
var noEmailError = "<?php echo $this->lang->line('enter_your_email'); ?>";
</script>
然后,通常,之后,我会包含引用全局变量的脚本:
<script type="text/javascript" src="/scripts/validate.js"></script>
脚本内的:
alert(noEmailError);
将显示本地化文本。
答案 2 :(得分:0)
在javascript字符串的页面输出的全局范围内创建一个json对象:
<script>
var oGlobalStrings = {
some_data : '<?=$this->lang->line('some_data_language_key');?>'
}
</script>
然后您可以使用以下语法在整个Javascript应用程序中使用它:
oGlobalStrings.some_data
效果非常好,可以在整个应用中轻松处理。