swift Locale

作者: 想聽丿伱說衹愛我 | 来源:发表于2020-12-11 16:06 被阅读0次

一、简介

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

    本文链接:https://www.haomeiwen.com/subject/wdhrgktx.html