[swift-evolution] Localization support for string interpolation
Dave Abrahams
dabrahams at apple.com
Mon Apr 25 17:03:22 CDT 2016
on Sun Apr 24 2016, Chris Lattner <swift-evolution at swift.org> wrote:
>> On Apr 24, 2016, at 2:33 PM, Chris Lattner via swift-evolution
> <swift-evolution at swift.org> wrote:
>>
>>
>>> On Apr 21, 2016, at 12:42 AM, Daniel Höpfl via swift-evolution
> <swift-evolution at swift.org> wrote:
>>>
>
>>> Hi there!
>>>
>>> TL;DR: Here’s my idea for a better localized strings handling in Swift.
>>> It includes both, support for string interpolation support for
>>> NSLocalizedString, and a new string delimiter `...` that can be
> used
>>> instead of NSLocalizedString("...”).
>>
>> FWIW, this is closely related to the idea of extending string
>> interpolation to support generalized “printf” style modifiers, which
>> would allow very expressive formatting inline in a string
>> interpolation. This has not yet come to pass, but a write up of the
>> ideas are available here:
>> https://github.com/apple/swift/blob/master/docs/TextFormatting.rst
>
> Actually, it looks like the interesting point didn’t make it into the
> formal writeup. The idea was to enable something like this (just a
> sketch):
>
> public protocol CustomStringConvertible {
> /// A textual representation of `self`.
> var description: String { get }
>
> func formattedDescription(format: String) -> String { get }
> }
>
> Int could then implement support for “x” to print hexadecimal, we
> could support left/right whitespace padding, and custom types could
> provide their own custom formatters (e.g. a string could have a title
> case formatter, or a "look up localized form of” modifier). We could
> then provide a “printf” that would allow traditional “%x0”
> substitutions. It could also be incorporated into the string literal
> syntax by allowing something like:
>
> let hashValue = 42 // not a good hash function
> print(“Hashcode = \(hashValue:x)”)
>
> This is just a sketch, but that’s the idea. It never went anywhere
> because we didn’t have the language features in place to make it work,
> notably defaulted implementations in protocols were missing at the
> time.
I believe I also had concerns about this design because it needlessly
misses opportunities for compile-time type safety. There doesn't seem
to be any reason to embed the format specifier in a dynamic string that
has to be parsed at runtime.
--
Dave
More information about the swift-evolution
mailing list