A1e373ed7b0b7c29ad037c1ed80c082c
Flutter 组件国际化(二):Locale详解

如果要实现Flutter的国际化,首先要知道Flutter是怎么表示语言环境,如何为语言环境分类。
在Flutter中,我们可以通过Locale来表示语言环境。


  // zh-CN表示中文
  const Locale local = Locale('zh', 'CN');

我们都知道zh-CN代表中文,那具体表示什么含义呢。其实Locale的表示是有专门标准的,Locale的底层是使用的是Unicode BCP47地区标识符标准http://www.unicode.org/reports/tr35/ ),同时所有语言环境标签都必须经过IANA的认证,IANA维护了一个有效的语言文字标记注册表https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry ) 。

而zh-CN就是符合上述标准且经过IANA认证的语言环境标签。

Language Tags(语言文字标记)格式规则如下:


 language    //语言文字种类,必须出现1次
   ["-" script]    ;书写格式,出现0或1次
   ["-" region]    ;国家地区,出现0或1次
   *("-" variant)    ;方言,出现0或多次
   *("-" extension)    ;扩展,出现0或多次
   ["-" privateuse]    ;私人用途,出现0或1次

所以, zh-CN其实表达的含义是language-region(语言-区域)的意思。

所以,语言环境是通过这样的组合规则来区分的,一般通过language、script、region组合区分。比如:


   language(主要语言文字种类):
   zh     Chinese    中国字或中国话
   cmn    Mandarin Chinese    普通话或國語发音
   yue    Yue Chinese    粤语

   script(书写格式):
   Hans    simplified Chinese    规范汉字
   Hant    traditional Chinese    國字

   region(国家地区):
   CN    CHINA    中国
   HK    HONG KONG    香港

Locale的构造方法就是通过指定languageCode、countryCode、scriptCode来初始化成不同的语言环境。比如:


  // zh-CN中文
  const Locale local = Locale('zh', 'CN');
  // zh-Hans-CN以规范汉字书写的中国大陆用词
  const Locale local = Locale.fromSubtags(
           languageCode: 'zh', scriptCode: 'Hans', countryCode: 'CN');
  // zh-Hans-HK以简体中文书写的香港地区用词
  const Locale local = Locale.fromSubtags(
           languageCode: 'zh', scriptCode: 'Hans', countryCode: 'HK');

top Created with Sketch.