Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java i18n内置过程(或将一个模板HTML编译为i18n HTML)_Java_Internationalization_Client Side - Fatal编程技术网

Java i18n内置过程(或将一个模板HTML编译为i18n HTML)

Java i18n内置过程(或将一个模板HTML编译为i18n HTML),java,internationalization,client-side,Java,Internationalization,Client Side,我正在从事一个需要支持国际化的项目。 我们想到的解决方案是: 为语言(即home.HTML)创建带有占位符的HTML模板 使用诸如“language_en_GB.json”之类的文件创建一个i18n目录 在构建过程中,将它们合并在一起以创建输出HTML。输出文件将位于基于语言的目录(例如“views/en_GB/home.html”或“views/fr_CA/home.html”) 所以基本上是这样的: <h1>{{i18n_welcome}}</h1> <h2&g

我正在从事一个需要支持国际化的项目。 我们想到的解决方案是:

  • 为语言(即home.HTML)创建带有占位符的HTML模板
  • 使用诸如“language_en_GB.json”之类的文件创建一个i18n目录
  • 在构建过程中,将它们合并在一起以创建输出HTML。输出文件将位于基于语言的目录(例如“views/en_GB/home.html”或“views/fr_CA/home.html”)
  • 所以基本上是这样的:

    <h1>{{i18n_welcome}}</h1>
    <h2>{{userName}}</h2>
    
    将在生成过程中变为:

       <h1>Welcome!</h1>
       <h1>{{userName}}</h1>
    
    欢迎!
    {{userName}}
    
    我有几个问题,非常感谢你的意见

  • 这是i18n的好方法吗
  • 您知道有一个模板引擎可以很好地完成i18n过程吗
  • 客户端“烘焙”是否有解决方案。我想一个UI开发人员能够烘焙本地以及

  • 根据您的需要和您当前在代码中使用的内容,有几种框架支持i18n即插即用。作为一个纯模板引擎,您可以查看或。要获得更完整的框架,可以查看和

    当然,还有许多其他选择。我只是列出了我见过的人们使用的四种最流行的方法

    基本上,对于任何一种框架,您都可以为每种语言创建资源包(使用特定包的语言命名。例如:language_en_GB.properties)。所以你的思维过程基本上是一致的。基本上从html文件开始,并包含占位符。在每种语言的资源包中,指定字符串应该是什么。在这之后,框架会为您动态地进行合并,为所讨论的语言使用适当的资源包


    因此,您已经走上了正确的道路——这一切都变成了一个与您的框架正确集成并利用它进行合并的问题,而不是在构建过程中进行合并。

    您没有提供必要的详细信息,因此我无法真正回答您的问题。我只能说,你们计划的似乎是另一个轮子的再发明(但并不像原来那个样圆)

    有一些i18n最佳实践。在Java世界中,它通常意味着在呈现页面时使用资源包(以属性文件的形式)和JSTL之类的机制来转换它们。这是最好的方法,因为您不需要重新编译任何东西来引入对另一种语言的支持

    如果您关心为客户端脚本提供支持,通常可以通过从网页中写出一些数组并在客户端访问来完成。我认为这是最常见的解决办法。另一种方法是使用一些web服务为您提供翻译,并通过XHR(即AJAX)阅读,但这可能会有问题。无论如何,您需要以某种方式将翻译从服务器端推送到客户端。
    当然,您需要从资源包中读取它们


    从您所写的内容来看,您似乎想要构建某种由应用程序服务器支持的静态网页(因此静态网页编译)。如果我猜对了,老实说,使用Java来实现它有点过分了。您最好使用一些CMS软件,如Joomla、Drupal或jEase。

    谢谢您的回复。我知道这些都是服务器端框架。我们今天这样做的国际化-使用JSP。我的想法是——由于在我们的构建过程中计划发生这么多事情(lessCSS变成css,js文件被最小化并压缩,主干模型和视图被合并到一个模块文件中,等等),为什么不在那里也使用i18n过程呢?这样,系统中只有静态HTML。这是一个合乎逻辑的解决方案吗?我想问题是,为什么您希望使它更难维护?现在,您将生成数百个静态html(取决于html页面和/或区域设置的数量)。此外,您最终得到的东西是定制的和非标准的,这使得其他人在将来更难进行维护。我想您最终会编写一个servlet,将html名称映射到html_lang名称(这与CDN思想背道而驰)。否则,您将无法在不同的页面之间链接,或者必须确保所有链接都有i18n扩展,这会变得很难看。我认为构建过程可以将模板目录的模板转换为i18n目录中的页面(即pages/en/home.html),谢谢您的详细回答。我觉得我可能在重新发明一个轮子——我不想那样。我的想法是,如果我的系统中已经有了微模板和一个为这些微模板服务的客户端MVC(主干),为什么不混合使用语言占位符和数据占位符,并在构建过程中预编译模板呢。我最终会得到一个纯静态的网站,我可以把它放在CDN上(成本更低,安装更容易)。这合乎逻辑吗?基本上,如果你所做的大部分是静态页面,也就是说,你不会有太多的东西动态生成,这种方法看起来很有希望。我不认为有人会这样做,所以你会是一个先锋。然而,我发现您的解决方案中没有什么缺点,主要与本地化有关:1。如何部署新语言而不重建整个系统。2.如何修复特定的本地化缺陷(即不正确的翻译、错位、所需的样式修改)。这些都是要考虑的问题,因为维护可能是有问题的。@ PAWE·DyDA可能是有问题的另一个问题是实际URL将显示区域(可能或可能不需要),并且所有的链接都需要附加区域。最后,我可以看到,在开发过程中测试这一点变得非常困难,因为验证所有链接是否正常工作的唯一方法是每次构建和部署所有链接。@Pawel-我同意我需要为新语言重新构建
       <h1>Welcome!</h1>
       <h1>{{userName}}</h1>