Laravel针对大型网站的本地化

时间:2014-01-24 21:26:17

标签: laravel laravel-4

是否有更好的方法可以存储大量文本以便在laravel中进行本地化?如果我的整个页面只是纯文本很容易,但我的几个页面都有复杂的布局,我需要添加多个字符串来围绕内容,如图像/链接/媒体。

如果我需要使用斜体/粗体或为文本执行任何类型的HTML以及我需要将它们分成若干部分以便能够执行此操作,这是一种痛苦。

我正在使用的一个例子:

return array(
    'exchange_rate' => array(
        'title' => 'Exchange Rate',
        'p1' => 'Disclaimer', 
        'p2' => 'Currency rate displayed is subject to change.',
        'p3' => 'View All Rates to Date'
    ),

第一个数组是页面,第二个是页面的内容。对于更复杂的布局,我经常需要更深入地使用多个数组,例如:

return array(
'exchange_rate' => array(
    'title' => 'Exchange Rate',
    'p1' => 'Disclaimer', 
    'p2' => 'Currency rate displayed is subject to change.',
    'p3' => 'View All Rates to Date',
    'table1' => array(
        'title' => 'Currency Table',
        'row1' => array(
           'l1' => 'Current Rate'
        ),
        'row2' => array('etc')
    )
);

我这样做了吗?有没有更好的方法来格式化我的语言文件,以便我可以在我的视图中解决布局?我只是好奇大型网站如何管理本地化。

非常感谢任何帮助,谢谢!!

编辑:我也知道您可以在本地化数组中添加占位符,例如:

'title' => ':title'

但是,在一个页面上添加所有链接,图像和媒体的占位符可能会变得混乱。 <\ n> Laravel也不支持语言数组中的HTML,所以我不能只在语言文件中插入内容。 - 是的,

现在看来,这里有两种不同的方式。

  1. 继续将它们分成小部分,以不同方式格式化文本。
  2. 将页面文本粘贴到每页一个“内容”数组中,使用Waavi将它们传输到数据库,然后使用网站上的WYSIWYG编辑器正确格式化它们以格式化数据库条目。 (虽然这也有问题因为你不能使用刀片模板,因为Lang :: get()只返回安全文本)
  3. 编辑(2015年2月10日):

    经过大量搜索,我创建了一个适合我需求的包。它完全消除了对laravel中任何文本数组的需求。它会自动将文本添加到数据库并将其转换为您的设置区域设置。此外,您无需管理和破译带点标记的翻译路径。

    https://github.com/stevebauman/translation

5 个答案:

答案 0 :(得分:10)

我已经编写了一个包来为您生成lang文件。编写模板,控制器......而不用翻译无聊。完成代码后,只需执行php artisan localisation:missing,它将在lang/*/目录中生成所有需要的文件。

它将同步翻译:

  • 保留当前使用的翻译
  • 创建新的翻译
  • 删除或移动底部过时的翻译

该软件包可在此处获取:https://github.com/potsky/laravel-localization-helpers

在日常使用中,它与po文件的工作流程相同。让我知道,如果你的生活现在变得更容易翻译Laravel真棒框架!

答案 1 :(得分:2)

您始终可以使用名为 Waavi translation

的程序包
  

保持项目翻译的正确更新非常麻烦。   通常,翻译人员无法访问代码库,即使在何时   他们很难跟踪哪些翻译缺失   每种语言或对原始文本的更新都需要   翻译将被修改。

     

此软件包允许开发人员利用他们的数据库和缓存   管理多语言网站,同时仍在处理语言文件   在开发过程中,并从Laravel的所有功能中受益   翻译包就像复数或替换一样。

答案 2 :(得分:2)

我认为这里没有理想的解决方案,这取决于项目的规模。或许只为每种语言提供不同的视图,然后动态调用View :: make - 就像这样:

$view = 'pages.'.Lang::getLocale().'.mypage';
if (View::exists($view)) return View::make($page);
else App::abort(404);

答案 3 :(得分:2)

虽然作者创建了自己的翻译包,但我还要添加另一个: laravel-gettext

来自CakePHP世界,在我的laravel项目中使用.po文件处理翻译,我会使用上面的扩展名,因为:

  1. 我以前习惯使用语法,对我来说使用它有点自然(我有创建它的代码片段)
  2. GNU Gettext是一个翻译标准,有翻译文件的编辑器(PoEdit)
  3. 更容易维护视觉效果并在文件中添加新标签
  4. 扩展不是我的,我到目前为止还没有使用它,但我会在第一次出现。

答案 4 :(得分:1)

那么,

大型网站可能会使用某种CMS来编辑不同语言的文本。

我不太确定Laravel,但您希望用户能够编辑文本。你需要的解决方案并不多:

  1. 您网站上的在线界面
  2. 或导出/导入翻译的脚本离线
  3. 最常见的格式是 .po 文件,有些软件甚至允许您直接导入/导出包含PHP数组的文件。但这不适用于您的格式,因为您的文件是多维数组。

    如果你这样做,this PHP PoParser class可以同时读写.po文件。