swift Locale

Posted ihoudf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift Locale相关的知识,希望对你有一定的参考价值。

作者:想聽丿伱說衹愛我
链接:https://www.jianshu.com/p/1199cda9c61b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、简介

Locale封装了有关语言、文化、技术惯例和标准的信息。Locale封装的信息示例包括用于数字的小数点、分隔符和日期格式化符号等。尽管可以使用多种语言环境,但通常使用与当前用户关联的语言环境。

二、API

  1. 用户目前使用的语言环境
public static var current: Locale  get 
print(Locale.current)
//en_CN (current)
  1. 自动跟踪用户偏好的语言环境
public static var autoupdatingCurrent: Locale  get 
print(Locale.autoupdatingCurrent)
//en_CN (autoupdatingCurrent)
  1. 初始化
public init(identifier: String)

可通过availableIdentifiers变量获取可用的标识符。

public static var availableIdentifiers: [String]  get 
var l = Locale(identifier: "zh_Hans_CN")
print(l)
//zh_CN (fixed)

print(Locale.availableIdentifiers)
//["eu", "hr_BA", "en_CM", "en_BI", "en_AE", "rw_RW", "ast", "en_SZ", "he_IL", "ar", 
//"uz_Arab", "en_PN", "as", "en_NF", "ks_IN", "es_KY", "rwk_TZ", "zh_Hant_TW", 
  1. 本地化字符串
  • 本地化标识符
public func localizedString(forIdentifier identifier: String) -> String?

可通过availableIdentifiers变量获取可用的标识符。

var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(forIdentifier: "zh_Hans_CN"))
//Optional("简体中文(中国大陆)")
print(l.localizedString(forIdentifier: "en_CN"))
//Optional("英语(中国大陆)")
  • 本地化语言代码
public func localizedString(forLanguageCode languageCode: String) -> String?

语言代码为zh_Hans_CN前面的zh,可通过isoLanguageCodes变量获取可用的语言代码。

public static var isoLanguageCodes: [String]  get 
var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(forLanguageCode: "zh_Hans_CN"))
//Optional("中文")
print(l.localizedString(forLanguageCode: "en_CN"))
//Optional("英语")

print(Locale.isoLanguageCodes)
//["aa", "ab", "ace", "ach", "ada", "ady", "ae", "aeb", "af", "afh", "agq", "ain", "ak",
//"akk", "akz", "ale", "aln",
  • 本地化地区代码
public func localizedString(forRegionCode regionCode: String) -> String?

地区代码为zh_Hans_CN后面的CN,可通过isoRegionCodes变量获取可用的地区代码。

public static var isoRegionCodes: [String]  get 
var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(forRegionCode: "CN"))
//Optional("中国大陆")
print(l.localizedString(forRegionCode: "TW"))
//Optional("台湾")

print(Locale.isoRegionCodes)
//["AC", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AQ", "AR", "AS", "AT", "AU", 
//"AW", "AX", "AZ", "BA", "BB", "BD",
  • 本地化脚本代码
public func localizedString(forScriptCode scriptCode: String) -> String?

脚本代码为zh_Hans_CN中间的hans。

var l = Locale(identifier: "zh_Hans_HK")
print(l.localizedString(forScriptCode: "Hans"))
//Optional("简体中文")
print(l.localizedString(forScriptCode: "Hant"))
//Optional("繁体中文")
  • 本地化变体代码
public func localizedString(forVariantCode variantCode: String) -> String?

变体代码是en_US_POSIX后面的POSIX(好像只有这一个)

var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(forIdentifier: "en_US_POSIX"))
//Optional("英语(美国,电脑)")
print(l.localizedString(forVariantCode: "POSIX"))
//Optional("电脑")
  • 本地化日历标识符
public func localizedString(for calendarIdentifier: Calendar.Identifier) -> String?

public enum Identifier 
        case gregorian//公历
        case buddhist//佛历
        case chinese//农历
        case coptic//科普特历
        case ethiopicAmeteMihret//埃塞俄比亚历
        case ethiopicAmeteAlem//埃塞俄比亚阿米特阿莱姆日历
        case hebrew//希伯来历
        case iso8601//国际标准历法
        case indian//印度国定历
        case islamic//伊斯兰历
        case islamicCivil//伊斯兰希吉来日历
        case japanese//和历
        case persian//波斯历
        case republicOfChina//民国纪年
        case islamicTabular//伊斯兰天文历
        case islamicUmmAlQura//伊斯兰历(乌姆库拉)

var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(for: .chinese))
//Optional("农历")
  • 本地化货币代码
public func localizedString(forCurrencyCode currencyCode: String) -> String?

可通过isoCurrencyCodes变量获取所有可用的货币代码。

public static var isoCurrencyCodes: [String]  get 

可通过commonISOCurrencyCodes变量获取常用货币代码。

public static var commonISOCurrencyCodes: [String]  get 
var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(forCurrencyCode: "CNY"))
//Optional("人民币")

print(Locale.isoCurrencyCodes.count)
//303
print(Locale.commonISOCurrencyCodes.count)
//155
  • 本地化排序标识符
public func localizedString(forCollationIdentifier collationIdentifier: String) -> String?
public func localizedString(forCollatorIdentifier collatorIdentifier: String) -> String?
var l = Locale(identifier: "zh_Hans_CN")
print(l.localizedString(forCollationIdentifier: "phonebook"))
//Optional("电话簿排序")
  1. 属性值
  • 语言环境的标志符
public var identifier: String  get 
var l = Locale(identifier: "zh_Hans_CN")
print(l.identifier)
//zh_CN
  • 语言环境的语言代码
public var languageCode: String?  get 

zh_Hans_CN的语言代码为前面的zh。

  • 语言环境的地区代码
public var regionCode: String?  get 

zh_Hans_CN的地区代码为后面的CN。

  • 语言环境的脚本代码
public var scriptCode: String?  get 

zh_Hans_CN的脚本代码为中间的Hans。

  • 语言环境的变体代码
public var variantCode: String?  get 

zh_Hans_CN的变体代码为nil,好像只有en_US_POSIX有变体代码POSIX。

var l = Locale(identifier: "zh_Hans_CN")
print(l.variantCode)
//nil
l = Locale(identifier: "en_US_POSIX")
print(l.variantCode)
//Optional("POSIX")
  • 语言环境的示例集
public var exemplarCharacterSet: CharacterSet?  get 
  • 语言环境使用的日历
public var calendar: Calendar  get 

zh_Hans_CN使用的日历为公历gregorian。

var l = Locale(identifier: "zh_Hans_CN")
print(l.calendar)
//gregorian (fixed)
  • 语言环境的排序规则标识符
public var collationIdentifier: String?  get 
public var collatorIdentifier: String?  get 

zh_Hans_CN的排序规则标识符为nil。

  • 语言环境是否使用公制
public var usesMetricSystem: Bool  get 

公制是一完全创新的单位制度,又称米千克秒(MKS或mks)单位制,建立在下述三种基本单位之上:米-用来确定距离,千克-用来确定质量,和秒-用来确定时间长度。

zh_Hans_CN使用公制,因此返回true。

  • 语言环境的小数分隔符
public var decimalSeparator: String?  get 

zh_Hans_CN的小数分隔符为 . 。

  • 语言环境的分组分隔符
public var groupingSeparator: String?  get 

zh_Hans_CN的分组分隔符为 , 。

  • 语言环境的货币符号
public var currencySymbol: String?  get 

zh_Hans_CN的货币符号为 ¥ 。

  • 语言环境的货币代码
public var currencyCode: String?  get 

zh_Hans_CN的货币代码为CNY。

  • 语言环境的引号开始定界符
public var quotationBeginDelimiter: String?  get 

zh_Hans_CN的引号开始定界符为 “ 。

  • 语言环境的引号结尾定界符
public var quotationEndDelimiter: String?  get 

zh_Hans_CN的引号结尾定界符为 ” 。

  • 语言环境的备用引号开始定界符
public var alternateQuotationBeginDelimiter: String?  get 

zh_Hans_CN的备用引号开始定界符为 ‘ 。

  • 语言环境的备用引号结尾定界符
public var alternateQuotationEndDelimiter: String?  get 

zh_Hans_CN的备用引号结尾定界符为 ’ 。

  1. 获取用户的首选语言列表
public static var preferredLanguages: [String]  get 

Bundle会根据此API的结果并结合您的应用程序支持的语言来确定您的应用程序将以何种语言运行。

print(Locale.preferredLanguages)
//["zh-Hans-CN", "en-CN"]
  1. 其它
  • 将标识符转换成组件字典
public static func components(fromIdentifier string: String) -> [String : String]
let com = Locale.components(fromIdentifier: "zh_Hans_CN")
print(com)
//["kCFLocaleScriptCodeKey": "Hans", "kCFLocaleCountryCodeKey": "CN", 
//"kCFLocaleLanguageCodeKey": "zh"]
  • 将组件字典转换成标识符
public static func identifier(fromComponents components: [String : String]) -> String
let com = Locale.components(fromIdentifier: "zh_Hans_CN")
print(Locale.identifier(fromComponents: com))
//zh_Hans_CN
  • 将字符串转换成规范的标识符
public static func canonicalIdentifier(from string: String) -> String
  • 将字符串转换成规范的语言标识符
public static func canonicalLanguageIdentifier(from string: String) -> String
  • 将Windows的语言环境代码转换成标识符
public static func identifier(fromWindowsLocaleCode code: Int) -> String?
  • 将标识符转换成Windows的语言环境代码
public static func windowsLocaleCode(fromIdentifier identifier: String) -> Int?
  • 语言环境的字符方向
public static func characterDirection(forLanguage isoLangCode: String) -> 
                                                  Locale.LanguageDirection

public enum LanguageDirection : UInt 
        case unknown = 0//未知
        case leftToRight = 1//从左到右
        case rightToLeft = 2//从右到左
        case topToBottom = 3//从上到下
        case bottomToTop = 4//从下到上

zh_Hans_CN的字符方向是从左到右。

var l = Locale(identifier: "zh_Hans_CN")
print(Locale.characterDirection(forLanguage: l.languageCode!).rawValue)
//1
  • 语言环境的行方向
public static func lineDirection(forLanguage isoLangCode: String) -> 
                                            Locale.LanguageDirection

zh_Hans_CN的行方向是从上到下。

var l = Locale(identifier: "zh_Hans_CN")
print(Locale.lineDirection(forLanguage: l.languageCode!).rawValue)
//3

以上是关于swift Locale的主要内容,如果未能解决你的问题,请参考以下文章

swift Locale

swift Locale

Swift NSLocale编程常量

Swift 日期格式返回错误的日期

以公制单位准确计算文本宽度

Swift将字符串日期转换为日期