l10n

Localization for D language


Keywords
library, i18n
License
Unlicense
Install
dub fetch l10n --version 0.1.7

Documentation

Localization for D language

Concept

Autogenerated code from unicode CLDR 28 (Generation tool will be published soon)

See examples folder

TODO:

  • (DONE) Localized languages
  • (DONE) Localized language scripts
  • (DONE) Localized territories
  • (DONE) Localized countries
  • Locale Scripts and Territory support ("es_mx" etc.)
  • (PARTIAL) Numbers to string using locale format
  • Numbers from string using locale format
  • (PARTIAL) Date/Time to string using locale format
  • Date/time from string using locale format
  • Numbers plurals
  • Measurement systems conversions ?
  • docs
  • unittests
  • some other ideas

Resources:

Usage:

import std.stdio;

import l10n;

void main()
{
    // By string
    auto en = Locale("en"); // Language.english

    // By enum
    auto ru = Locale(Language.russian);

    // String case no matter
    auto de = Locale("De");

    // Languages
    writefln("Russian in English: %s", en.asString(Language.english));
    writefln("Frech in German: %s", de.asString(toLanguage("fr")));
    writefln("Tajik in French: %s", Locale("fr").asString(Language.tajik));

    // Territory (Territory enum includes Countries)
    writefln("World in Russian: %s", ru.asString(Territory.world));
    writefln("Russia in English: %s", en.asString(Territory.russia));
    writefln("Germany in French: %s", Locale("fr").asString(Country.germany));

    // Number separated by locale specified group symbol
    auto sample = 1234567;
    writefln("English: %s -> %s", sample, en.asString(sample));
    writefln("Russian: %s -> %s", sample, ru.asString(sample));
    writefln("German:  %s -> %s", sample, de.asString(sample));

    // Dates
    auto someDate = Date(2016, Month.feb, 29);
    writefln("English Date(full): %s -> %s", someDate, en.asString(someDate, DateFormat.full));
    writefln("English Date(long): %s -> %s", someDate, en.asString(someDate, DateFormat.long_));
    writefln("English Date(medium): %s -> %s", someDate, en.asString(someDate, DateFormat.medium));
    writefln("English Date(short): %s -> %s", someDate, en.asString(someDate, DateFormat.short_));

    writefln("Russian Date(full): %s -> %s", someDate, ru.asString(someDate, DateFormat.full));
    writefln("Russian Date(long): %s -> %s", someDate, ru.asString(someDate, DateFormat.long_));
    writefln("Russian Date(medium): %s -> %s", someDate, ru.asString(someDate, DateFormat.medium));
    writefln("Russian Date(short): %s -> %s", someDate, ru.asString(someDate, DateFormat.short_));

    writefln("German Date(full): %s -> %s", someDate, de.asString(someDate, DateFormat.full));
    writefln("German Date(long): %s -> %s", someDate, de.asString(someDate, DateFormat.long_));
    writefln("German Date(medium): %s -> %s", someDate, de.asString(someDate, DateFormat.medium));
    writefln("German Date(short): %s -> %s", someDate, de.asString(someDate, DateFormat.short_));
}

Output:

Russian in English: English
Frech in German: Französisch
Tajik in French: tadjik

World in Russian: Мир
Russia in English: Russia
Germany in French: Allemagne

English: 1234567 -> 1,234,567
Russian: 1234567 -> 1 234 567
German:  1234567 -> 1.234.567

English Date(full): 2016-Feb-29 -> Monday, February 29, 2016
English Date(long): 2016-Feb-29 -> February 29, 2016
English Date(medium): 2016-Feb-29 -> Feb 29, 2016
English Date(short): 2016-Feb-29 -> 2/29/16

Russian Date(full): 2016-Feb-29 -> понедельник, 29 февраля 2016 г.
Russian Date(long): 2016-Feb-29 -> 29 февраля 2016 г.
Russian Date(medium): 2016-Feb-29 -> 29 февр. 2016 г.
Russian Date(short): 2016-Feb-29 -> 29.02.16

German Date(full): 2016-Feb-29 -> Montag, 29. Februar 2016
German Date(long): 2016-Feb-29 -> 29. Februar 2016
German Date(medium): 2016-Feb-29 -> 29.02.2016
German Date(short): 2016-Feb-29 -> 29.02.16