- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 106
Localization _ LocalizationFormatter
The LocalizationFormatter localizes literals and placeholders.
{ :L ( lang ) : literal }
| Any value | :formatter-name | (lang) | literal | 
|---|---|---|---|
| Any value | "L" | language code | the literal to localize | 
{ Any value : L (lang) : { placeholder } }
| Any value | :formatter-name | (lang) | placeholder | 
|---|---|---|---|
| Any value | "L" | language code | the nested placeholder | 
string Name: default isL
The name to use a named formatter
ILocalizationProvider? LocalizationProvider: default isnull.
Can be set to the standardLocalizationProvider, which handlesresxresource files.
- The standard LocalizationProvider, handlesresxresource files. A fallback culture can be set. It will be used, in case no item for a certain culture could be found in any of the resources.LocalizationProvidercan search an unlimited number of resoures.
- All IFormatters can also make use of localization, if needed.
- Issues with localization throw a LocalizationFormattingException, which is derived fromFormattingException.
The culture-specific results shown here are included in embedded resource files, which are omitted for brevity. Full source code: see LocalizationFormatterTests.
// "WeTranslateText" and its translations
// are entries in the resource file
// culture supplied as a format option
Smart.Format("{:L(es):WeTranslateText}");
// culture supplied as an argument to the formatter
var culture = CultureInfo.GetCultureInfo("es");
Smart.Format(culture, "{:L:WeTranslateText}");
// outputs for both: "Traducimos el texto"// "has {:#,#} inhabitants}" and its translations
// are entries in the resource file
Smart.Format("{0} {1:L(en):has {:#,#} inhabitants}", "X-City", 8900000);
// outputs: "X-City has 8,900,000 inhabitants"
Smart.Format("{0} {1:L(es):has {:#,#} inhabitants}", "X-City", 8900000);
// outputs: "X-City tiene 8.900.000 habitantes"Nested formats are also supported. This is useful, if the string to localize contains a placeholder instead of pure text.
Example: If the format is "{:L(fr):{ProductType}}", the ProductType placeholder will be replaced with the variable content "pen". "pen" will in turn be localiced to "bic" for the FR locale.
By example of pluralization
// "{} item", "{} items" and its translations
// are entries in the resource file
Smart.Format("{0:plural:{:L(en):{} item}|{:L(en):{} items}}", 0);
// outputs for English: 0 items
Smart.Format("{0:plural:{:L(fr):{} item}|{:L(fr):{} items}}", 0);
// outputs for French: 0 élément
Smart.Format("{0:plural:{:L(fr):{} item}|{:L(fr):{} items}}", 200);
// outputs for French: 200 élémentsCreate your custom ILocalizationProvider implementation:
public class DictLocalizationProvider : ILocalizationProvider
{
    private readonly Dictionary<string, Dictionary<string, string>> _translations;
    public DictLocalizationProvider()
    {
        _translations = new Dictionary<string, Dictionary<string, string>> {
            { "en", new Dictionary<string, string> { { "COUNTRY", "country" } } },
            { "fr", new Dictionary<string, string> { { "COUNTRY", "pays" } } },
            { "es", new Dictionary<string, string> { { "COUNTRY", "país" } } }
        };
    }
    public string? GetString(string name)
    {
        return GetTranslation(name, CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
    }
    public string? GetString(string name, string cultureName)
    {
        return GetTranslation(name, cultureName);
    }
    public string? GetString(string name, CultureInfo cultureInfo)
    {
        return GetTranslation(name, cultureInfo.TwoLetterISOLanguageName);
    }
    private string? GetTranslation(string name, string cultureName)
    {
        if (!_translations.TryGetValue(cultureName, out var entry)) return null;
        return entry.TryGetValue(name, out var localized) ? localized : null;
    }
}Use it:
// Change settings for your provider
Smart.Default.Settings.Localization.LocalizationProvider = new DictLocalizationProvider();
// Add the formatter
Smart.Default.AddExtensions(new LocalizationFormatter());
Smart.Format("{:L(en):COUNTRY} * {:L(fr):COUNTRY} * {:L(es):COUNTRY}");
// Output: "country * pays * país"- Syntax, Terminology
- Placeholders and Nesting
- string.Format Compatibility
- Character Literals in Format Strings
- HTML With CSS or JavaScript
- Data Source Extensions
- Default _ DefaultFormatter
- Lists _ ListFormatter
- Choose _ ChooseFormatter
- Condition _ ConditionalFormatter
- Null _ NullFormatter
- SubString _ SubStringFormatter
- RegEx _ IsMatchFormatter
- Pluralization _ PluralLocalizationFormatter
- Localization _ LocalizationFormatter
- Templates _ TemplateFormatter
- TimeSpan _ TimeFormatter
- XML _ XElementFormatter
- Extension Methods
- Home
- Common Pitfalls
- HTML with CSS or JavaScript
- Overview
- Main Features
- Formatters
- Extra Features
- Console and StringBuilder
- TemplateFormatter
- SmartSettings to control Smart.Format behavior
 
- Additional Info
- License
 3.6
 3.6