Internationalization 特定于语言环境的静态文件是否有命名约定?

Internationalization 特定于语言环境的静态文件是否有命名约定?,internationalization,locale,Internationalization,Locale,我有一些将被本地化的静态资源(图像和HTML文件)。我见过的一个软件是Apache,它在名称后面附加了区域设置;例如,test_en_US.html或test_de_CH.html。我想知道这个命名方案是否被认为是标准的,或者是否每个项目都有不同的做法。虽然在文件名的位置上似乎没有一个标准的约定,但是语言(例如“en”)和区域(例如“en-US”)的国际代码都是非常常见和简单的。我见过的变体,不包括“enUS”与“en_US”与“en US”: foo.enUS.ext foo.ext_enU

我有一些将被本地化的静态资源(图像和HTML文件)。我见过的一个软件是Apache,它在名称后面附加了区域设置;例如,
test_en_US.html
test_de_CH.html
。我想知道这个命名方案是否被认为是标准的,或者是否每个项目都有不同的做法。

虽然在文件名的位置上似乎没有一个标准的约定,但是语言(例如“en”)和区域(例如“en-US”)的国际代码都是非常常见和简单的。我见过的变体,不包括“enUS”与“en_US”与“en US”:

  • foo.enUS.ext
  • foo.ext_enUS
  • enUS.foo.ext
  • foo/enUS.ext
  • enUS/foo.ext
  • …疯狂的

我个人喜欢第一个和最后一个变体。前者用于按名称/资源对文件进行分组(适用于有限数量的文件需要本地化的情况),后者用于按区域设置对文件进行分组(更适用于大量本地化文件的情况)。

虽然没有文档化的标准来命名本地化文件,但我建议使用文件名格式[\u语言[\u国家]]在哪里

  • 语言是两个字母的语言代码
  • territory是两个字母的国家代码
例如:

  • myFile.txt(非本地化文件)
  • myFile_en.txt(全球英语本地化)
  • myFile_en_US.txt(美国英语本地化)
  • myFile_en_GB.txt(英国英语本地化)
为什么?这是操作系统、全球化工具(如Trados和WorldServer)使用的最典型的格式,和编程语言。因此,除非您特别喜欢不同的格式,否则我认为没有理由偏离大多数其他人正在做的工作。这可能会为您节省一些集成方面的麻烦。

您应该始终使用“事实上的”标准,这是unix/posix与
gettext
的结合方式。您应该使用
gettext
进行本地化

因此,唯一正确的方法是使用本地化命名,如下所示:

en
en_US
en_UK
一些应用程序,尤其是Java开发人员,有时会使用
en-US
(用连字符代替下划线),这完全是错误的

gettext标准是这样的,而且只有这样:

locale
 |_en_US
    |_LC_MESSAGES
      |_appname.mo
其中:

locale
-目录的名称可能有所不同,但强烈建议使用“locale”-名称

en_US
-任何标准语言环境,如*es_es*,*es_PT*

LC\u消息
-必填,不能更改

appname.mo-msgfmt编译的appname.po文件(appname是您想要的)