2014-12-05 55 views
3

我想的本地化我的网站的最佳途径。我使用Laravel,它已经具备了PHP的本地化类,但我还需要一些JavaScript字符串本地化:PHP和JavaScript

翻译理想,我会用它可以通过poEdit的可编辑库或翻译文件,并可以同时用于JavaScript和PHP,但我找不到解决方案。它甚至可以不必创建一个全新的代码库?

我认为到现在的解决方案是远远不够理想:

  • 使用PHP的本地化类PHP字符串
  • 使用JavaScript的本地化JavaScript库
  • 存储在cookie中的语言,可以通过两端阅读。

保持两个单独的语言文件(一个用于php和一个用于javascript)的想法似乎不是一个优雅的解决方案。

我看到了一些JavaScript库为laravel,但他们需要你编译你的库到JavaScript数组文件,每次你更新的东西,这将使它不是很动态和冗余,因为大多数PHP字符串将不会在JavaScript中使用,反之亦然。

对此有何看法?

回答

1

你总是可以有你的JavaScript文件是PHP每次请求产生的,这意味着你仍然可以使用PHP本地化库两种。

我会想象,这可能无法在浏览器中缓存JavaScript文件,但您始终可以拥有一个PHP脚本,用于生成JavaScript文件,为每种语言创建不同的文件,然后在任何时候需要更新他们,只是再次运行PHP脚本覆盖它们

我从来没有工作过的国产化,但我想它涉及到它匹配词/短语为每种语言文件?如果是这样,你可以设置一个用于检查最后一次该文件已被更新,然后运行PHP脚本生成的Javascript文件cron作业?然后,你将不必担心

1

我们一直面临着这样的问题了,而每次手动运行它。如果你在Github上搜索,你会发现一些项目附近,但任何这些解决问题,正如你所说的保持两个文件是不是所有的好选择。于是,我们发现了解决这个问题的方法是:

  1. 在每一页上,声明一个变量上的JavaScript,你会用PHP设置,并以这种方式将可也JS的一面。它还不够优雅,但解决了这个问题。因此,这将是这样的:

    /** 
    * i18n for JS 
    */ 
    
    var i18n = (function() { 
        return { 
        stringOne: "{{trans('yourStringOneKeyFromPhp')}}", 
        stringTwo: "{{trans('yourStringTwoKeyFromPhp')}}" 
        } 
    }()); 
    
  2. 在另一边,一个更好的解决办法是阿迪是指出,通过创建假看法,在现实中都担任javascript文件,您将在其中解决控制器上的i18n变量。这是一个更优雅的解决方案,但不符合缓存,所以我认为这是一个权衡问题,您选择实施哪种方式。也许,一个好方法是使用这个plugin,并更新json文件,如前所述。

0

对于小尺寸配有网站我想创建一个翻译表,如

然后你将通过您的网址识别当前区域设置和获取数据只对当前的语言环境,例如

if locale == de, get en_gb and de fields. 

然后建立你的数组:

$translations = ['en_gb' => 'de']; 

一旦你得到了你能翻译通过PHP任何静态内容的阵列。

现在,你可以通过你的阵列的JavaScript

var translations = json_encode($translations); 

现在,你也将有一个JavaScript对象,你可以访问: translations['English text']将返回去翻译。

您只会在页面加载/刷新时查询一次数据库,并且这些表格可以很容易地进行维护。