NSLocalizedString with format

24,600

Solution 1

[NSString stringWithFormat:NSLocalizedString(@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", @"Query if parm 1 is still correct for parm 2"), individual.contactInfo, individual.name];

Solution 2

Given sentences can be constructed with the variable parts in a different order in some languages then I think you should use positional arguments with [NSString stringWithFormat:]:

NSString *format = NSLocalizedString(@"number_of_items", @"Number of items");

Which would load the following string for English:

@"Is \"%1$@\" still correct for \"%2$@\" tap \"OK\" otherwise tap \"Change\" to choose new contact details"

And perhaps something else for French (I don't know French so I won't attempt a translation, but it could well have the first and second argument in a different order):

"French \"%2$@\" french \"%1$@\" french"

And you can safely format the string as normal:

NSString *translated = [NSString stringWithFormat:format individual.contactInfo, individual.name];

Solution 3

I just want to add one very helpful definition which I use in many of my projects.

I've added this function to my header prefix file:

#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__]

This allows you to define a localized string like the following:

 "ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@.";

and it can be used via:

self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier);

Solution 4

Swift

//Localizable.strings

"my-localized-string" = "foo %@ baz";

Example:

myLabel.text = String(format: NSLocalizedString("my-localized-string", 
                                       comment: "foo %@ baz"), "bar") //foo bar baz
Share:
24,600
Peter Warbo
Author by

Peter Warbo

I work as IT consultant in Gothenburg, Sweden, doing mobile development mostly for iOS.

Updated on July 09, 2022

Comments

  • Peter Warbo
    Peter Warbo almost 2 years

    How would I use NSLocalizedString for this string:

    [NSString stringWithFormat:@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", individual.contactInfo, individual.name];
    

    When using stringWithFormat before I've used it in the following manner:

    [NSString stringWithFormat:@"%d %@", itemCount, NSLocalizedString(@"number of items", nil)];
    
  • Hot Licks
    Hot Licks about 11 years
    You don't need to use position-specifying tokens in the English version (if the order conforms without). They can still be used in the French (or whatever) if needed.
  • trojanfoe
    trojanfoe about 11 years
    @HotLicks I think it makes sense to use them everywhere if used at all.
  • Peter Warbo
    Peter Warbo about 11 years
    Ah so NSLocalizedString recognizes %@?
  • Hot Licks
    Hot Licks about 11 years
    No, but stringWithFormat does.
  • agarcian
    agarcian over 9 years
    Works like a charm and very elegant.
  • AHM
    AHM over 9 years
    Note, though, that this kills the genstrings tool that only searches for direct references to NSLocalizedStrings. It does not process macros.
  • Matstar
    Matstar over 6 years
    If you're on Swift, you can use String(format: NSLocalizedString("foo %@ baz"), "bar").