You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用国际化:如何根据区域获取用户偏好单位设置

iOS应用单位自动适配:基于系统设置判断用户偏好方案

一、能否通过系统设置判断单位偏好?

完全可以。iOS的Locale类提供了直接判断用户单位偏好的属性,核心逻辑如下:

  • 利用Locale.current.usesMetricSystem属性:返回true表示用户偏好公制单位,false则对应美制习惯单位(英制),该属性已经覆盖绝大多数主流区域的单位习惯。
  • 针对少数特殊区域(如英国部分单位混用场景),可结合Locale.current.regionCode做补充判断,但usesMetricSystem足以满足常规需求。

示例代码:

let currentLocale = Locale.current
let isMetricPreferred = currentLocale.usesMetricSystem

二、输入环节的单位自动分配方案

输入核心是根据系统区域自动匹配用户习惯的输入单位,再将输入值转换为统一单位存储,确保数据一致性。

1. 建立单位映射表

根据你列出的单位类型,创建对应关系表,快速获取当前区域对应的输入单位:

struct PreferredUnit {
    // 长度
    static let length: UnitLength = Locale.current.usesMetricSystem ? .meters : .feet
    // 距离
    static let distance: UnitLength = Locale.current.usesMetricSystem ? .kilometers : .miles
    // 质量
    static let mass: UnitMass = Locale.current.usesMetricSystem ? .kilograms : .pounds
    // 排量
    static let displacement: UnitVolume = Locale.current.usesMetricSystem ? .liters : .cubicInches
    // 容积
    static let volume: UnitVolume = Locale.current.usesMetricSystem ? .liters : .gallons
    // 功率
    static let power: UnitPower = Locale.current.usesMetricSystem ? .kilowatts : .horsepower
    // 温度(修正拼写:fahrenheit/celsius)
    static let temperature: UnitTemperature = Locale.current.usesMetricSystem ? .celsius : .fahrenheit
    // 气压
    static let atmosPressure: UnitPressure = Locale.current.usesMetricSystem ? .millibars : .inchesOfMercury
    // 速度
    static let speed: UnitSpeed = Locale.current.usesMetricSystem ? .kilometersPerHour : .milesPerHour
}

2. 输入处理流程

  • 初始化输入控件时,根据PreferredUnit设置显示的单位(比如体重输入框显示“千克”或“磅”)。
  • 用户输入数值后,先以习惯单位创建Measurement,再转换为统一存储单位(建议用公制单位,方便后续计算和跨区域展示):
// 示例:处理体重输入
let inputValue = 165.0 // 用户输入的数值
let inputUnit = PreferredUnit.mass
let userInputMeasurement = Measurement(value: inputValue, unit: inputUnit)

// 转换为统一存储单位(如千克)
let storedMeasurement = userInputMeasurement.converted(to: .kilograms)

3. 特殊场景补充

  • 若后续需要支持用户手动切换单位偏好,可将用户选择存储到UserDefaults,逻辑上优先使用用户自定义设置,其次才是系统区域设置。
  • 温度单位的转换无需手动计算,Measurement会自动处理华氏与摄氏的刻度偏移。

三、验证与测试

可在iOS模拟器的「设置」→「通用」→「语言与地区」中切换区域(如美国/中国),验证输入单位是否自动切换,以及数值转换是否准确。

内容的提问来源于stack exchange,提问作者Peel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:05:15