0

如何在 JavaScript 文件中使用翻译?

我有一个formatter.js文件:

function xyz(id)
{
    if(confirm("Vill du radera ?")){
        location.href = "/student/files/delete/" + id;
    }
}

在这里,我想使用“vill du radera?”的翻译。

在我的view.phtml文件中,我使用这样的东西:

<?=$this->translate->_("Select Template")?> 

它工作正常...

4

3 回答 3

1

如果您在 *.js 包含的文件中进行很少的翻译,那么当您知道将使用哪些键时,您可以在视图中设置一个 JS 变量,例如:

//viewscript:
<script ...>
    var translation = <?php echo Zend_Json::encode($this->translate->_("Select Template")) ?>;
</script>

您只需要确保变量在需要之前可用。

但是如果你需要做很多翻译,一种方法是translate(key)在你的 *.js 文件中添加一个函数。此函数将执行 AJAX 调用以检索单个键翻译,或者 - 最好 - 许多/所有翻译并将它们存储在一个变量中,以便在第一次翻译时只完成一次到服务器的往返。

//*.js
var translations = null;
function translate(key) {
    if (translations !== null) {
        return translations[key];
    }
    else {
        //use AJAX to get translations from server: /translations/serve-json
        // ...
        translations = ajaxData;
        return translations[key];
    }
}

这是控制器:

//TranslationsController (for example)
public function serveJsonAction() {
    //get translations first
    // ...
    $this->_helper->json($translations);
}

最终用途是:

function xyz(id)
{
    if(confirm(translate("VILL_DU_RADERA"))){
        location.href = "/student/files/delete/" + id;
    }
}
于 2012-07-13T07:38:44.170 回答
1

因为你正在使用这个:

function xyz(id)
{
    if(confirm("Vill du radera ?")){
        location.href = "/student/files/delete/" + id;
    }
}

您必须从 .phtml 文件中调用它。

你可以做一件事:

您可以使用两个参数 (1) id 和 (2) translate 变量调用函数 xyz()

在 .phtml 文件中

xyz("<?php echo id;?>","<?php echo $this->translate->_("Select Template")?>");

在 .js 文件中

function xyz(id,translate)
{
    if(confirm(translate)){
        location.href = "/student/files/delete/" + id;
    }
}

试试看。

于 2012-07-13T09:45:32.050 回答
0

将 js 文件另存为 .php 并将其包含在视图中也是一种方法。当然,您需要用标签包装 javascript。但最好的部分是它可以使用例如:

     <script>
     var text = '<?php echo $this->translate('string that would be in JavaScript');?>';
     </script>

这种方式的优点是您将在一个地方拥有所有翻译

于 2013-03-06T00:17:02.300 回答