lan*_*nzz 13 email templates localization gettext longtext
我正在开发一个多语言的PHP Web应用程序,我有很长的( - )文本,我需要用gettext进行翻译.这些是电子邮件模板(通常很短,但仍有几行)和视图模板的一部分(较长的描述性文本块).这些文本将包括一些简单的HTML(强调粗体/斜体,可能是这里或那里的链接).模板是PHP脚本,其输出被捕获.
问题是gettext对于处理较长的文本似乎非常笨拙.较长的文本通常会比短文本有更多的变化 - 我可以更改msgid并确保在所有翻译中更新它(当msgid很长时可能是很多工作并且非常容易出错),或者我可以保留msgid保持不变并仅修改翻译(这会在模板中留下误导性的过时文本).另外,我已经看到了反对在gettext字符串中包含HTML的建议,但是避免它会将一个自然文本分成很多块,这将是翻译和重新组合的更大噩梦,我也看到了建议不必要的将gettext字符串拆分成单独的msgids.
我看到的另一种方法是完全忽略这些较长文本的gettext,并为每个语言环境分离外部子模板中的那些块,并且只包括当前语言环境的那个.缺点是我将gettext .po文件和位于完全不同位置的单独模板之间的转换工作分开.
由于此应用程序将在未来用作其他应用程序的起点,因此我试图提出长期的最佳方法.在这种情况下,我需要一些关于最佳实践的建议.你是如何实施类似案件的?什么结果发挥作用,结果是一个坏主意?
Ani*_*van 10
这是我使用的工作流程,在一个流量非常大的网站上,该网站有大约几十个长篇版本的文本内容,翻译成六种语言:
msgid)这个工作流程的优点:
这个工作流程的缺点:
我很满意这个工作流程为我们的网站运行的方式,并且绝对推荐它,并再次使用它.开始花了几天时间,但是很容易建立,训练和发射.
希望这对您的项目有所帮助,祝您好运.
我刚遇到这个问题,我相信我是以优雅的方式解决了这个问题.
问题:我们想在PHP中使用Gettext,并使用主要语言字符串作为键翻译.但是,对于大块的HTML(使用h1,h2,p,a等等),我要么必须:
要么
这些选项都没有吸引我,所以这就是我所做的:
在markdown中写入内容(大文本块),并将它们保存在文件中.示例文件将是/homepage/content.md(主要/源文本)/homepage/content.da-DK.md,/homepage/content.de-DE.md
编写一个获取内容文件(用于当前语言环境)并解析它的类.然后我用它像:
<?=Template::getContent("homepage/content")?>
但是,动态大文本呢?简单.使用模板引擎.我决定使用Smarty,并在Template课堂上使用它.
我现在可以使用模板逻辑.. 降价!那太棒了?!
然后是棘手的部分..
要使内容看起来不错,有时您需要以不同方式构建HTML.考虑一个在其下方有3个"功能框"的广告系列区域.简单的解决方案:为广告系列区域提供一个文件,为3个方框中的每一个提供一个文件.
但我可以做得更好.
我写了一个快速块解析器,所以我将所有内容写在一个文件中,然后单独渲染每个块.
示例文件:
[block campaign]
Buy this now!
=============
Blaaaah... And a smarty tag: {$cool}
[/block]
[block feature 1]
Feature 1
---------
asdasd you get it..
[/block]
[block feature 2] ...
Run Code Online (Sandbox Code Playgroud)
这就是我在标记中呈现它们的方式:
<?php
// At the top of the document...
// Class handles locale. :)
$template = Template::getContent("homepage/content", [
"cool" => "Smarty variable! AWESOME!"
]);
?>
...
<title><?=_("My Awesome App")?></title>
...
<div class="hero">
<!-- Template data already processed! :) -->
<?=$template->renderBlock("campaign")?>
</div>
<div class="featurebox">
<?=$template->renderBlock("feature 1")?>
</div>
<div class="featurebox">
<?=$template->renderBlock("feature 2")?>
</div>
Run Code Online (Sandbox Code Playgroud)
我担心我无法提供任何源代码,因为这是针对公司项目的,但我希望你能得到这个想法.
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |