Lokalisierung für Mobile Apps

download Lokalisierung für Mobile Apps

of 66

  • date post

    12-Jul-2015
  • Category

    Technology

  • view

    1.073
  • download

    0

Embed Size (px)

Transcript of Lokalisierung für Mobile Apps

  • Lokalisierung fr MobileAppsDaniel Schneller, CenterDevice GmbH

  • AgendaI18N vs. L10N

    Sprachen und Regionen

    Text

    Datum und Uhrzeit

    Zahlen

    Bilder und andere Ressourcen

    https://github.com/dschneller/I18N-Example

  • I18N vs. L10N

  • I18N

    L10N

  • InternationalizationI 18 Zeichen N

    LocalizationL - 10 Zeichen - N

  • Internationalization[] ein Programm so zu gestalten, dass es leicht (ohne den Quellcode ndern zu mssen) an andere Sprachen

    und Kulturen angepasst werden kann. *

    * Wikipedia

  • LocalizationAnpassung von [] Software an die in einem []

    geographisch oder ethnisch umschriebenen Nutzungsgebiet [] vorherrschenden lokalen sprachlichen und kulturellen Gegebenheiten. *

    * Wikipedia

  • I18N L10NApp Lokalisierte App

    !"#$%&!

    ! !"#

    $%&

  • Sprachen und Regionen

  • Sprachen und RegionenSprache Region

    12h-Zeit fr Amerikaner in Deutschland

    Jnner Januar

    Localization Locale Deutscher bevorzugt englische Anwendungstexte

    Aber: 24h-Zeitformat

  • Sprachen und Regionen

  • Sprachen und Regionen

  • Sprachen und Regionen

  • Sprachen und RegionenScheme Startparameter

    -AppleLanguages (ar,de,fr)

    Reihenfolge bestimmt Prferenz

    -AppleLocale en_US

  • NSLocaleKapselt aktuelle Regionaleinstellungen

    + (id)autoupdatingCurrentLocale+ (id)currentLocale

    NSCurrentLocaleDidChangeNotification [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localeDidChange:) name:NSCurrentLocaleDidChangeNotification object:nil]

    Formatter / Locale Instanzen erneuern

    Bildschirminhalte aktualisieren

  • NSLocale-[NSLocale objectForKey:]

    NSString* NSLocaleIdentifier NSString* NSLocaleMeasurementSystem

    NSString* NSLocaleLanguageCode NSString* NSLocaleDecimalSeparator

    NSString* NSLocaleCountryCode NSString* NSLocaleGroupingSeparator

    NSString* NSLocaleScriptCode NSString* NSLocaleCurrencySymbol

    NSString* NSLocaleVariantCode NSString* NSLocaleExemplarCharacterSet

    NSString* NSLocaleCurrencyCode NSString* NSLocaleCollatorIdentifier

    NSString* NSLocaleCalendar NSString* NSLocaleQuotationBeginDelimiterKey

    NSString* NSLocaleCollationIdentifier NSString* NSLocaleQuotationEndDelimiterKey

    NSString* NSLocaleUsesMetricSystem

  • NSLocaleEnthlt nicht die aktuelle Sprache der Anwendung!

    Locale Localization [NSBundle mainBundle].localizations; // NSArray, (alle)

    [NSBundle mainBundle].preferredLocalizations[0]; // (laufende)

    Caveats InfoPlist.strings Lokalisierungen bestimmen localizations

    Schnittmenge mit Nutzerprferenz

    AppleLanguages Parameter

  • Text

  • Text TextSprache fr Meldungen, Labels etc. Schreibrichtung & Alignment Schriftsysteme Zahlen in Text Namen & Adressen Phrasen, Floskeln und Begrie Pluralbildung Sortierung

  • Text TextSprache fr Meldungen, Labels etc. Schreibrichtung & Alignment Schriftsysteme Zahlen in Text Namen & Adressen Phrasen, Floskeln und Begrie Pluralbildung Sortierung

  • Base LocalizationEine Leitsprache (Base)

    Add Localization

    .strings Files genstrings

    ibtool

    Eine Kopie pro Sprache .lproj Ordner

  • Base LocalizationEine Leitsprache (Base)

    .strings Files genstrings

    ibtool

    Eine Kopie pro Sprache .lproj Ordner

  • Base Localization

    /* Class = "IBUILabel"; text = "Loaded by SecondViewController"; ObjectID = "NDk-cv-Gan"; */

    "NDk-cv-Gan.text" = "Loaded by SecondViewController";

    "/* Class = "IBUILabel"; text = "First View"; ObjectID = "KQZ-1w-vlD"; */

    "KQZ-1w-vlD.text" = "First View";

  • Base LocalizationVorschau im Assistant Editor

    Xcode 6: Sprachwahl

    Double-Length Pseudo-Language

    Auto Layout

  • NSLocalizedStringMakrofamilie

    NSLocalizedStringNSLocalizedStringFromTableNSLocalizedStringFromTableInBundleNSLocalizedStringWithDefaultValue

    Zugri auf .strings Files

    Verwendet NSBundle -[[NSBundle mainBundle] localizedStringForKey:value:table:]

  • NSLocalizedStringBeispiel

    [button setTitle:NSLocalizedString(@"reset.counter.button.title", @"Reset Counter action button") forState:];

    genstrings Localizable.strings /* Reset Counter action button */"reset.counter.button.title" = "Zurcksetzen";

  • .strings FilesUpdates?

    Use ibtool every time you update your labels and text.In the Base.lproj folder:ibtool ChangedNib.xib --generate-strings-file NewStrings.stringsOpen the generated output file and copy all new string entries to ChangedNib.strings in each lproj.

    #fail

  • Texte nicht normalisierenDRY! Do Repeat Yourself

    [NSString stringWithFormat:@]

    Localizable.strings count = Anzahl

    game = Spiel

    reset = zurcksetzen

    save = sparen

    thumbnail = Daumennagel

    reset count

    zurcksetzen Anzahl

    save game

    sparen Spiel

  • Texte nicht normalisierenKontext und Grammatik gehen verloren

    Satzbau

    Wortformen (Deklination & Konjugation)

    Eigene Strings fr jeden Zweck reset.counter.button = Auf 0 stellen

    Kontext fr bersetzer Sprechende Keys

    Hinreichende Kommentare (Button vs. Label, ungefhre Lnge etc.)

  • VariablenParameter

    [NSString stringWithFormat: NSLocalizedString(@"click.counter.label", @"P1: Current Click Count."), self.clickCount]

    "/* P1: Current Click Count. */"click.counter.label" = "%1d x geklickt;

  • VariablenParameterposition dokumentieren!

    Zeige 4 von 12 gesamt

    Total 12 Showing 4

    /* Param 1: current page; Param 2: total count */"current.page.label" = Zeige %1d von %2d gesamt;/* Param 1: current page; Param 2: total count */"current.page.label" = Total %2d Showing %1d;

  • Sonderflle 0 und 1

    Plural

    Englisch Deutsch

    0 No books Keine Bcher1 One book Ein Buch

    sonstiges 100 books 100 Bcher

    Localizable.stringsbooks.0 = No Books

    books.1 = One Book

    books.n = %1d books

    books.0 = Keine Bcher

    books.1 = Ein Buch

    books.n = %1d Bcher

    Abfrage im Code, Problem gelst.

  • Englisch Deutsch

    0 No books Keine Bcher1 1 book 1 Buch2 2 books 2 Bcher

    wenige 3 books 3 Bcherviele 11 books 11 Bcher

    sonstiges 100 books 100 Bcher

    Vielleicht nicht ganz

    Plural

  • Englisch Deutsch Arabisch

    0 No books Keine Bcher 1 1 book 1 Buch 2 2 books 2 Bcher

    wenige 3 books 3 Bcher viele 11 books 11 Bcher

    sonstiges 100 books 100 Bcher

    Vielleicht nicht ganz

    Plural

  • .strings + .stringsdictSeit iOS7

    Implementiert (Unicode*) Lokalisierungsregeln fr Plural

    Geschlecht [rdar://16670931]

    Plist Format Name identisch mit .strings

    .strings muss existieren, kann aber leer sein

    * http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html#ar

  • .strings + .stringsdict

    https://developer.apple.com/library/ios/releasenotes/Foundation/ RN-Foundation/index.html#//apple_ref/doc/uid/TP30000742-CH2-SW56

    files.selected.label.%dNSStringLocalizedFormatKey %#@num_files_are@ selectednum_files_are NSStringFormatSpecTypeKey NSStringPluralRuleTypeNSStringFormatValueTypeKey dzeroNo file isoneA file isother%d files are

  • .stringsdictKategorien pro Sprache per Unicode

    zero geht zustzlich in iOS immer

    few z.B. fr deutsch nicht untersttzt

  • String TablesLocalizable.strings

    Default fr NSLocalizedString()

    Groe Projekte groe Datei

    Optional zerlegbar NSLocalizedStringFromTable(MyController, Key, Comment)

    MyController.strings

    Projektgliederung Kontext fr bersetzer

    3rd Party Code

    Analog fr .stringsdict

  • Datum und Zeit

  • Datum und ZeitKonvertierung zwischen NSDate und NSString

    +[NSDateFormatter localizedStringFromDate:dateStyle:timeStyle:] -[NSDateFormatter setLocale:]

    NSDateFormatterStyle

    Deutsch / Deutschland Englisch / USA

    Short 08.07.14 22:32 7/8/14,10:32 PMMedium 08.07.2014 22:32:36 Jul 8, 2014, 10:32:36 PM

    Long 8. Juli 2014 22:32:36 MESZ Jul 8, 2014, 10:32:36 PM GMT+2

    Full Dienstag, 8. Juli 2014 12:32:36 Mitteleuropische SommerzeitTuesday, July 8, 2014 at 12:39:16 PM

    Central European Summer TimeNo - -

    NSDateFormatter

  • Datum und ZeitNSDateFormatter.h

    typedef enum { NSDateFormatterNoStyle = , NSDateFormatterShortStyle = , NSDateFormatterMediumStyle = , NSDateFormatterLongStyle = , NSDateFormatterFullStyle = } NSDateFormatterStyle

    Kombinierbar fr Datum und Zeit NSDateFormatterNoStyle nur Datum / Zeit

    Aktualisierung durch OS Updates

    NSDateFormatter

  • Datum und ZeitUnd wenn die Defaults nicht reichen?

    Keine konkreten Format-Strings verwenden!

    Unicode Locale Data Markup Language* [f setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"u QQ" options:0 locale:LOCALE_EN_US]];NSLog(@%@", [f stringFromDate:july8th);

    Q3 2014

    NSDateFormatter

    * http://www.unicode.org/reports/tr35/tr35-dates.html#Contents

  • Relative Zeitangaben [formatter setDoesRelativeDateFormatting:YES];NSLog(@%@, %@, %