CodeIgniter:解析位于javascript中的动态语言标题

时间:2012-10-15 17:48:56

标签: php codeigniter translation codeigniter-2

我有一个需要本地化的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);
    }
    ...
}

谢谢!

3 个答案:

答案 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

效果非常好,可以在整个应用中轻松处理。