[{"id":"bcb0874d-299b-448e-9552-9e9b25ef80dd","tags":[{"product":null,"links":null,"id":"ba7e818e-4f6b-4211-b1ac-58e3bafcf439","name":"\u66F4\u65B0","color":"orange","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"ae60ae59-34f5-4f32-a8eb-243ed1457543","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"3d4848c3-910f-4ffa-9153-60bb507334a9","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"133f4ca6-d951-4d65-a618-3dc6301266f7","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"2426c71d-8332-4cbd-a436-1ec4f8666464","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"2ce7b6b0-78aa-4e4b-bf8a-e4ba2f988298","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"4706db46-0811-4652-8f59-1e0a1da84758","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"8f1271bb-2cd9-4f39-9897-c15b239ee7ab","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"677e13a7-6f3e-449f-986c-2c3a26f8d54f","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"5e40f6dc-caec-49d7-a1d0-be65f06815ba","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"2457f0e0-9e71-4860-a87d-065e0fb84f84","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"d5c67fd0-1145-482c-9113-97b492c44c18","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"a609a8fa-ab91-4c1d-a1c3-d209d0463303","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]},{"id":"b4a9eb15-94e5-48df-b218-a24138f0cf9c","tags":[{"product":null,"links":null,"id":"adf72f47-7f61-4239-8392-b9bcc127fa80","name":"\u65B0\u589E","color":"green","productId":"0995490e-43fc-4d6e-bc8d-8e66f38b0c63"}]}]
        
(Showing Draft Content)

系统语言/自定义语言

功能概述

作为一款国际化产品,Wyn 界面支持多种语言显示。默认可以在en(英语)、pl(波兰语)、zh (中文)和 zh-TW(中文繁体)之间进行切换。

除了这四种内置的语言之外, 还支持定制语言。

官方语言包

在后台语言包管理界面中可以看到,我们有四种内置的官方语言包,分别为中文(简体)、中文(繁体)、英语和波兰语,并且每种语言包保留了最新的两个版本。

可以基于这四种官方语言包进行自定义,并应用到整个系统。

image2022-12-9_15-4-33.png

支持三种方式自定义语言包:

  1. 创建

  2. 上传

  3. 导入

以下分别为您介绍。

方式一:创建自定义语言包

此种方式直接在后台创建语言包,方便快捷。

1. 单击 +创建语言包 按钮。

image2022-12-9_16-28-32.png

2. 为新的语言包设置基本信息。

  • 语言名称:输入新语言包的名称,例如图中的“自定义语言包示例”。

  • 引用的语言:选择一个官方语言,后续将在此语言包的基础上进行修改,形成新的语言包。比如下图中选择了中文(简体),那么后续将在简体中文的基础上进行修改,形成新的语言包。

  • 语言代码:在下拉列表中选择一个代码,作为新语言包的语言代码,应用语言包时用来在URL中标识本语言。

完成设置后,单击下方的“ 创建 ”按钮。

image2022-12-9_16-52-50.png

自定义语言包中可见刚刚创建的语言包。此时仅是将官方语言包进行了复制,并没有进行定制。

image2022-12-9_18-2-0.png

  • 语言名称:创建、上传或导入语言包时,为语言包输入的名称。

  • 语言代码:自定义语言包时,为语言包选择或自定义的语言代码。该代码将在URL中作为 language 参数的参数值标识本语言。

  • 母语名称:语言代码对应的母语名称。如果自定义语言代码,不是从列表中选取的话,这里会显示为“未知语言”。

  • 产品版本:语言代码对应的产品版本。低于当前系统版本时需手动升级。

  • 发布状态:表示当前语言包是否发布,发布之后即可在系统中使用。

  • 是否有草稿:是否存在未发布的内容。比如刚刚创建的语言包、发布之后又进行的编辑修改等。

  • image.png:手动升级按钮。当语言包对应的产品版本低于当前系统的版本时,则需手动点击按钮升级。

    升级时可查看版本间的语言差别,如需修改则可以直接单击导出,将不同之处导出为 Excel 文件,修改后上传。如不修改则直接单击升级

    image

  • image.png:编辑按钮,单击进入语言包编辑器。下一步中将介绍。

  • image.png:更多。单击后可发布语言包、丢弃草稿、下载和删除。

3. 点击铅笔按钮,打开语言包编辑器进行编辑定制。

image2022-12-12_12-3-0.png

编辑器左侧为系统中的功能模块,右侧呈现该模块中的字串列表。

字串列表也分为左右两部分,左边为官方语言包内容,右侧为对应的自定义内容,可编辑修改。

全部修改完成后,单击上方的保存按钮保存语言包。

当文件中有修改时,文件右侧的字母会显示为“M”,保存后显示为“D”。

image

4. 单击关闭按钮,退出编辑器,完成定制。之后即可发布和使用。

方式二:上传自定义语言包

我们也可以将官方语言包下载,然后进行定制化处理再上传到系统中进行使用。

1. 首先下载一个语言包,比如中文包。

image2022-12-12_14-52-51.png

下载之后将压缩包解压,看到如下文件。

image2022-5-31_14-39-11.png

2. 修改解压后的文件制作语言包。

其中manifest.txt 为声明文件,其中描述了语言包的信息。

需注意以下两点:

  • 如下红色底纹中内容不要修改,其他内容请根据实际情况进行修改。

  • 其中 LanguageCode (黄色底纹)为语言代码,其命名必须符合RFC4646规范、i18nnext 源代码规范且必须在微软官方DotNet Core中的Culture 列表中(详见本页最下方内容)。

    且该代码后续会用来在URL中标识本语言包。

    image2022-6-21_11-50-33.png

    比如,我们仅将LanguageCode修改为zh-Hans-CN。

    image2022-7-27_15-29-24.png

注意

LanguageCode 即语言代码不能与系统中已有语言包的语言代码重复。

type=info

为了确保语言代码的合法性,建议您使用新建语言包时下拉列表中给出的语言代码。

image

其他文件夹中的文件除了工程文件(language-resources.json)之外均为语言资源文件,请按实际需要修改。

每个文件夹中包含的模块如下:

  • gcef-identity-service :登录页面、重置密码页面、序列号注册页面等。

  • gces-analysis:数据模型相关页面。

  • gces-common:数据源、数据集、用户、组织、角色、生成令牌等页面。

  • gces-dashboard:仪表板相关页面。

  • gces-forguncy:填报相关页面。

  • gces-reporting:报表相关页面。

  • gces-server:其他,比如门户页面、后台管理页面、文档详情页面等。

全部修改完成后,将所有文件选中,压缩成.zip 格式。

image2022-5-31_17-6-54.png

3. 在后台上传语言包。

image2022-12-12_17-47-35.png

image2022-12-12_17-51-21.png

上传后语言包显示在自定义语言包栏目中,可以对其进行管理发布。

image2022-12-12_17-53-46.png

方式三:导入自定义语言包

导入自定义语言包是指先将已有语言包导出为 Excel 格式的文件,然后在本地进行修改,之后导入到系统中这样一个过程。

1. 单击导出按钮将语言包导出。

image

选择需要导出的模块,然后单击导出

image

导出之后为一个 Excel 文件。

image

2. 打开 Excel 文件,找到对应的功能模块编辑字串,然后保存文件。

image

文件中第一个Sheet 即“Manifest” 中记录了文件的属性信息。除LanguageCode (即语言代码)和 DisplayName (即语言名称)外,均不可修改。

如需修改 LanguageCode (即语言代码)则必须满足一定的规范,有关的具体介绍请参见本页中方式二中的详细介绍。

image

3. 导入到系统中。

使用上传功能进行 Excel 文件导入,单击上传按钮。

image

单击上传,选择修改好的 Excel 文件,并单击提交按钮即可导入。

image


上传后语言包显示在自定义语言包栏目中,可以对其进行管理发布和使用。

image


也可以对已有的自定义语言包使用 Excel 导出导入的方式进行更新。

但要求原自定义语言为已发布状态,这样上传新语言包时才会将原来的内容全量覆盖,成为新草稿。后续将其发布使用即可。

image

发布语言包

发布后的语言包才可以在系统中应用。

在自定义语言包右侧单击更多按钮,选择发布

image2022-12-12_12-15-51.png

在弹出的对话框中单击

image2022-12-12_16-2-16.png

发布成功后,状态显示已发布。此时就可以在系统中应用了。

image2022-12-12_12-16-47.png

应用自定义语言

自定义语言包发布后即可应用到系统中,有两种方法应用自定义语言包:

第一种: 在个人偏好中设置界面显示语言。

image2022-12-12_12-19-46.png

第二种: 在URL中使用“lng”参数,参数值为自定义语言包的语言代码。比如:http://localhost:51980/ ?lng=aa

image2022-12-12_16-4-51.png

无论使用哪种方法应用自定义语言后即可查看到效果。

比如示例中我们将个人配置模块中的修改头像改为了修改个人头像,可以看到已经生效。

image2022-12-12_14-35-39.png

语言代码规范

RFC4646 规范和 i18next 语言代码规则解读

在产品中 LanguageCode 除了遵循 RFC4646 国际规范之外,还必须遵循 i18next 语言代码规则。

只有遵循了 i18next 语言代码规则才可以保证语言包在系统中正常使用。

RFC4646 国际规范部分解读

以下是我们从RFC4646规范中提取的重要内容,帮助您快速熟悉规范。

组成

languagetag=language[−script][−region]∗[−variant]∗[−extension][−privateuse]

type=info

提示

1.所有子标签值均不区分大小写。虽然子标签不区分大小写,但是统一的格式有助于理解。RFC4646规范建议:

非language子标签的两位字母均采用大写。

非language子标签的4位字母均采用首字母大写,其他字母小写。(在i18next源代码规范中对大小写规定进行了一定的补充说明,请进一步查看)

2.所有子标签值都具有最长长度为8位的限制,严格不允许存在空格。

3.中括号表示可省略,星号后的内容可有多个。

详解

Primary Language Subtag(主语言子标签)

  1. 表示一种被IANA认证通过的语种

  2. 语言代码的第一个子标签

  3. 不能被省略

  4. 格式与规则:

    范围

    规范

    备注

    2 characters

    ISO 639-1


    3 characters

    ISO 639-2


    'qaa'~'qtz'

    reserved by ISO 639-2

    private use

    4 characters

    reserved

    possible future standardization

    5~8characters

    discouraged

    no examples

    'i'

    used by some grandfathered tags


    other

    unallowed


    另外,主语言子标签还可以包含扩展语言子标签。

    Extended Language Subtags(扩展语言子标签)

    • 位置紧跟主语言子标签,在其他子标签之前,理解成为主语言子标签的一部分

    • 最多可以拥有三个扩展语言子标签

    • 扩展语言子标签的值不能被其他规范注册

  5. 举例:

    zh, en

Script Subtag(方言子标签)

  1. 用于区分语言书面形式和书写系统,最显著地作用就是标注书写显示或打印时语言是从左到右还是从右到左

  2. 必须紧跟主语言子标签或者扩展语言子标签,在其他子标签之前

  3. 可以省略,最多一个

  4. 不同语言对应有固定的方言子标签,例如Hans和Hant就是针对中文(zh),不能跟在其他主语言子标签之后

  5. 格式与规则:

    范围

    规范

    备注

    3 digits

    ISO15924


    4 characters

    ISO15924


    'Qaaa'~'Qabx'

    reserved

    private use

  6. 举例:

    script subtag: Hans(简体中文)Hant(繁体中文)

    primary language subtag+script subtag: zh-Hanszh-Hant

Region Subtag(地区子标签)

  1. 用于标注与国家、地区相关的语言变体,一般只这种语言对该地区的特有表述做了定制化

  2. 地区子标签位于主语言子标签、扩展语言子标签和方言子标签之后,其他子标签之前

  3. 可以省略,最多一个

  4. 格式与规则:

    范围

    规范

    备注

    2 characters

    ISO3166-1(Alpha-2)

    规范中ISO3166 Alpha-3不能使用

    3 digits

    UN M49

    部分可用

  5. 举例

    region subtag: TW(台湾省)CH(瑞士)

    primary language subtag+region subtag: zh-TW(台湾省使用的中文)de-CH(瑞士使用的德语)

    primary language subtag+script subtag+region subtag: zh-Hant-TW(台湾省使用的繁体中文)

Variant Subtag(变体子标签)

  1. 变体子标签用于表示语言的其他的、易于识别的变体,这些变体定义了一种语言或其方言,而其他可用的子标签没有涵盖这些变体。

  2. 变体子标签位于扩展子标签和私有用途子标签之前

  3. 可以没有,也可以有多个

  4. 每个变体都对应固定的主语言子标签,不同语言的变体子标签不能混用

  5. 格式与规则:

    范围

    规范

    备注

    >5characters

    没有规范

    需要rfc4646规范进行注册

    1digit+>3(character|digit)

    没有规范

    需要rfc4646规范进行注册

  6. 举例

    variant subtag: 1991(从1991年之后算起)

    primary language subtag+variant subtag: de-1991(自1991年以后的规范德语)

Extension Subtag

  1. 扩展子标签提供了一种机制来扩展语言标记,以便在各种应用程序中使用

  2. 扩展子标签与前面的其他子标记之间由一个单字符子标记分隔,该字符不能为x

  3. 可以没有,也可以有多个

  4. 每个扩展子标记的长度必须在2至8个字符之间,且仅由字母或数字组成,每个子标记之间用一个'-'分隔。

  5. 格式与规则:

    格式

    singleton-extension subtag

    singleton

    非x的单字符

    extension subtag

    2~8characters

    其他

    每个singleton之后必须跟至少一个extension subtag

  6. 举例

    extention subtag: a-USa-AMb-CHRIS

    primary subtag+extension subtag: zh-a-USzh-a-US-AM-b-CHRIS

Private Use Subtag

  1. 私有使用子标签被用于通过私有协议来表示特定上下文中重要的语言差异

  2. 私有使用子标签必须放在语言标签的最后

  3. 私有使用子标签与前面的定义的子标签之间有一个'x'字符分隔

  4. 举例:

    private use subtag: x-AZE

    primary language subtag+private use subtag: de-x-AZE

type=info

提示

  • 简单说,RFC4646文件规定,一种语言的标签应该按照如下方式排列:

    language-script-region-variant-extension-privateuse

    1. language:这部分就是ISO639规定的代码,比如中文是zh。

    2. script:表示变体,比如简体汉字是zh-Hans,繁体汉字是zh-Hant。

    3. region:表示语言使用的地理区域,比如zh-Hans-CN就是中国大陆使用的简体中文。

    4. variant:表示方言。

    5. extension-privateuse:表示扩展用途和私有标识。

    一般约定,language标签全部小写,region标签全部大写,script标签只有首字母大写。不同标签之间用连字号-链接。

  • 下面列出一些与中文有关的语言标签。

    • zh-Hans简体中文

    • zh-Hans-CN大陆地区使用的简体中文

    • zh-Hans-HK香港地区使用的简体中文

    • zh-Hans-MO澳门使用的简体中文

    • zh-Hans-SG新加坡使用的简体中文

    • zh-Hans-TW台湾使用的简体中文

    • zh-Hant繁体中文

    • zh-Hant-CN大陆地区使用的繁体中文

    • zh-Hant-HK香港地区使用的繁体中文

    • zh-Hant-MO澳门使用的繁体中文

    • zh-Hant-SG新加坡使用的繁体中文

    • zh-Hant-TW台湾使用的繁体中文

i18next 语言代码规则

特殊值:hans、hant、lntn、cyrl、cans、mong、arab

具体规范:

  1. 如果code被‘-’分为两部分:

    • 第一部分:

      必须全部为小写;

    • 第二部分:

      如果全小写后不在特殊值范围内,则第二部分需要全大写;

      如果全小写后在特殊值范围内,则第二部分首字母大写

      举例:zh-HANS(非法)应该为zh-Hans 、zh-tw(非法)应该为zh-TW

  2. 如果code被‘-’分为三部分:

    • 第一部分:

      必须全部为小写;

    • 第二部分:

      如果全小写后在特殊值范围内,则第二部分首字母大写;

      如果全小写后不在特殊值范围内:

      • 且长度为2,则必须全部大写

      • 且长度不为2,则大小写都可以

    • 第三部分:

      如果全小写后在特殊值范围内,则第三部分首字母大写;

      如果全小写后不在特殊值范围内:

      • 且第一部分不为sgn,同时第三部分长度为2时,第三部分必须全大写

      • 其他情况大小写都可以

  3. 其他情况,大小写都可以

微软官方DotNet Core中的Culture 列表

微软官方对 Culture 的支持列表不是固定的,而是与计算机相关。

具体请参考如下链接中内容:

https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo?view=net-6.0#Custom