I think in Swift.

let count = 10
> let says = NSLocalizedString("
> ​blabla
> \(count)
> ​blabla
> ", comment: "
> ​blabla
> ")


​can be roughly interpreted as

let says = String.localizedStringWithFormat(NSLocalizedString("
> ​blabla
> %
> ​@
> ​blabla
> ", comment: "
> ​blabla
> "), count)


​So if Swift does not want to do much effort on this ​, it could just find
every localized string that is with  '\(foo)' in `NSLocalizedString` and
converted to `String.localizedStringWithFormat(NSLocalizedString...`
internally.

Zhaoxin


On Wed, Nov 2, 2016 at 12:08 AM, Jens Alfke <j...@mooseyard.com> wrote:

>
> > On Nov 1, 2016, at 1:53 AM, Zhao Xin via swift-users <
> swift-users@swift.org> wrote:
> >
> > I began to realize that` \(count)` was not dealed well in localization.
> The compiler calculated the full string then looking for the translation,
> instead of looking for the translation first.
>
> NSLocalizedString was designed (in the 1990s) to be used with methods like
> String(format:…) that take printf-style “%”-substituted format strings.
> Swift’s string interpolation is obviously a different mechanism entirely.
>
> I suspect that Swift interpolation won’t work well for localized strings
> because the string and the code are so tightly connected. Localization very
> often needs to change the order of parameters, for instance. It’s also
> unclear where things like number formatting happen in Swift interpolation;
> when localizing a string, the conversion needs to be done using the same
> locale as the string lookup, which might not happen if the string-to-number
> conversion is separate and uses the default locale.
>
> —Jens
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to