【问题标题】:Finding the distance, currency, temperature units etc. for a country (iPhone)查找某个国家/地区的距离、货币、温度单位等 (iPhone)
【发布时间】:2010-01-28 09:00:08
【问题描述】:

在我的应用程序本地化期间,我浏览了很多文档,我确定我在某处读到有一种方法可以获得一组与语言环境相关联的单元。

我相信它说的是“基于文化的单位……”之类的东西。

我想在某些国家/地区以华氏和英里显示温度和距离,在其他国家/地区以摄氏度和公里显示温度和距离。

有没有办法在 iPhone SDK 中访问这些单元的列表。

谢谢。

【问题讨论】:

    标签: iphone localization iphone-sdk-3.1


    【解决方案1】:

    您可以使用NSLocale查看货币单位,但是对于英制与公制,您需要自己制作一个列表

    哎呀。您可以检查英制与公制。有NSLocaleMeasurementSystemNSLocaleUsesMetricSystem 键。

    【讨论】:

    • 嗨,肯尼,谢谢!我想我会多考虑一下,好像有理由为两个小标签加载这样的列表:/
    • 嗨,肯尼!感谢您回复这个:)非常完美,我还没有开始编制国家与测量系统的列表,所以这是一个完美的时间。再次感谢。
    • 其实很简单:BOOL isMetric = [[[NSLocale currentLocale] objectForKey:NSLocaleUsesMetricSystem] boolValue];
    【解决方案2】:

    值得一提的是,Apple 提供了一个不错的库(MKDistanceFormatter,在 iOS 7 中引入)自动将 CLLocationDistance 呈现为给定用户的区域设置和语言的适当字符串。

    它会进行一些模糊舍入(例如 300 英尺->350 英尺->400 英尺),但可以很好地在单位之间进行转换(例如,英尺 -> 英里,在适当的时候这样做)。除非您需要非常精确的值,否则此类非常适合在两行代码中返回粗略估计的距离。

    MKDistanceFormatter *distanceFormatter = [[MKDistanceFormatter alloc] init];
    [distanceFormatter setUnitStyle:MKDistanceFormatterUnitStyleAbbreviated]; // Optional
    NSString *formattedDistance = [distanceFormatter stringFromDistance:100];
    NSLog(@"%@",formattedDistance); // Prints "350 ft"
    

    https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKDistanceFormatter_class/Reference/Reference.html

    【讨论】:

      【解决方案3】:

      我只是想指出,随着 iOS8 的发布,至少您提到的某些单元将有新的NSFormatters

      将有NSLengthFormatterNSMassFormatterNSEnergyFormatter,它们非常易于使用——请参阅iOS8 NSFormatter tutorial。这是一个使用 NSLengthFormatter 和 swift 的示例:

      let lengthFormatter = NSLengthFormatter()
      println(@"Kilometer: %@", lengthFormatter.stringFromValue(1000, unit: .Kilometer))       //Kilometer: 1,000 km
      

      【讨论】:

        【解决方案4】:

        斯威夫特:

        1.)

        import MapKit
        

        2.) 由于创建格式化程序很昂贵,您最好将格式化程序设置为惰性属性。通过这样做,您可以仅在必要时初始化格式化程序并重用格式化程序而不是创建新的格式化程序。

        lazy var distanceFormatter: MKDistanceFormatter = {
            var tempDistanceFormatter =  MKDistanceFormatter()
            tempDistanceFormatter.unitStyle = .Abbreviated // .abbreviated in Swift 3
        
            return tempDistanceFormatter
        }()
        

        3.)

        let distanceString = self.distanceFormatter.stringFromDistance(yourDistance)
        

        【讨论】:

          【解决方案5】:

          我已将此方法提取到字符串扩展。看起来很优雅

          Swift 4.1 版本

          import MapKit
          
          extension String {
              init(distance: Double ) {
                  let mkDistanceFormatter = MKDistanceFormatter()
                  mkDistanceFormatter.unitStyle = .abbreviated
                  self = mkDistanceFormatter.string(fromDistance: distance)
              }
          }
          

          用法

          let distance = Double(34234.0)
          let stringDistance String(distance:distance)
          

          【讨论】:

            猜你喜欢
            • 2015-05-10
            • 1970-01-01
            • 1970-01-01
            • 2013-08-18
            • 1970-01-01
            • 1970-01-01
            • 2020-04-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多