Lokalisierung in xamarin. IOSLocalization in Xamarin.iOS

Dieses Dokument behandelt die Lokalisierungs Features des IOS SDK und erläutert, wie Sie mit xamarin darauf zugreifen können.This document covers the localization features of the iOS SDK and how to access them with Xamarin.

Anweisungen zum Einschließen von Zeichensätzen/Codepages in Anwendungen, die nicht-Unicode-Daten verarbeiten müssen, finden Sie in den Internationalisierungs Codierungen .Refer to the Internationalization Encodings for instructions on including character sets/code pages in applications that must process non-Unicode data.

IOS-Platt Form FeaturesiOS platform features

In diesem Abschnitt werden einige der Lokalisierungs Features in ios beschrieben.This section describes some of the localization features in iOS. Fahren Sie mit dem nächsten Abschnitt fort, um einen bestimmten Code und Beispiele anzuzeigen.Skip to the next section to see specific code and examples.

SpracheLanguage

Benutzer wählen Ihre Sprache in der App " Einstellungen " aus.Users choose their language in the Settings app. Diese Einstellung wirkt sich auf die sprach Zeichenfolgen und Bilder aus, die vom Betriebssystem und in apps angezeigt werden.This setting affects the language strings and images displayed by the operating system and in apps.

Um die Sprache zu bestimmen, die in einer App verwendet wird, erhalten Sie das erste Element von NSBundle.MainBundle.PreferredLocalizations :To determine the language being used in an app, get the first element of NSBundle.MainBundle.PreferredLocalizations:

var lang = NSBundle.MainBundle.PreferredLocalizations[0];

Bei diesem Wert handelt es sich um einen Sprachcode en , z. b. für Englisch, für es Spanisch, ja für Japanisch usw. Der zurückgegebene Wert ist auf eine der von der Anwendung unterstützten Lokationen beschränkt (mithilfe von Fall Back-Regeln, um die beste Entsprechung zu bestimmen).This value will be a language code such as en for English, es for Spanish, ja for Japanese, etc. The value returned is restricted to one of the localizations supported by the application (using fallback rules to determine the best match).

Der Anwendungscode muss nicht immer nach diesem Wert suchen – xamarin und IOS stellen Funktionen bereit, mit denen die richtige Zeichenfolge oder Ressource für die Sprache des Benutzers automatisch bereitgestellt werden kann.Application code does not always need to check for this value – Xamarin and iOS both provide features that help to automatically provide the correct string or resource for the user's language. Diese Features werden im weiteren Verlauf dieses Dokuments beschrieben.These features are described in the remainder of this document.

Hinweis

Verwenden NSLocale.PreferredLanguages Sie, um die Spracheinstellungen des Benutzers zu bestimmen, unabhängig von den von der APP unterstützten Lokalisierungs Vorfassungen.Use NSLocale.PreferredLanguages to determine the user's language preferences, regardless of the localizations supported by the app. Die von dieser Methode zurückgegebenen Werte wurden in ios 9 geändert. Weitere Informationen finden Sie unter Technical Note TN2418 .The values returned by this method changed in iOS 9; see Technical Note TN2418 for details.

GebietsschemaLocale

Benutzer wählen Ihr Gebiets Schema in der App " Einstellungen " aus.Users choose their locale in the Settings app. Diese Einstellung wirkt sich darauf aus, wie Datumsangaben, Uhrzeiten, Zahlen und Währungen formatiert werden.This setting affects the way that dates, times, numbers, and currency are formatted.

Dadurch können Benutzer wählen, ob Sie 12-Stunden-oder 24-Stunden-Zeitformate sehen, ob das Dezimaltrennzeichen ein Komma oder ein Punkt ist und wie die Reihenfolge von Tag, Monat und Jahr in der Datumsanzeige liegt.This lets users choose whether they see 12-hour or 24-hour time formats, whether their decimal separator is a comma or a point, and the order of day, month and year in date display.

Mit xamarin können Sie sowohl auf die IOS-Klassen von Apple ( NSNumberFormatter ) als auch auf die .NET-Klassen in System. Globalization zugreifen.With Xamarin you have access to both Apple’s iOS classes (NSNumberFormatter) as well as the .NET classes in System.Globalization. Entwickler sollten auswerten, welche für Ihre Anforderungen besser geeignet ist, da jeweils verschiedene Features verfügbar sind.Developers should evaluate which is better suited to their needs, as there are different features available in each. Insbesondere wenn Sie in-App-Kaufpreise mit storekit abrufen und anzeigen, sollten Sie die Formatierungs Klassen von Apple für die zurückgegebenen Preisinformationen verwenden.In particular, if you are retrieving and displaying In-App Purchase prices using StoreKit you should use Apple’s formatting classes for the price information returned.

Das aktuelle Gebiets Schema kann auf zweierlei Weise abgefragt werden:The current locale can be queried by either of two ways:

  • NSLocale.CurrentLocale.LocaleIdentifier
  • NSLocale.AutoUpdatingCurrentLocale.LocaleIdentifier

Der erste Wert kann vom Betriebssystem zwischengespeichert werden und kann daher nicht immer das aktuell ausgewählte Gebiets Schema des Benutzers widerspiegeln.The first value can be cached by the operating system and so might not always reflect the user’s currently selected locale. Verwenden Sie den zweiten Wert, um das aktuell ausgewählte Gebiets Schema abzurufen.Use the second value to obtain the currently selected locale.

Hinweis

Mono (die .NET-Laufzeit, auf der xamarin. IOS basiert) und die IOS-APIs von Apple unterstützen keine identischen Sätze von Kombinationen aus Sprache und Region.Mono (the .NET runtime upon which Xamarin.iOS is based) and Apple’s iOS APIs do not support identical sets of language/region combinations. Aus diesem Grund ist es möglich, eine Kombination aus Sprache und Region in der IOS- Einstellungs -App auszuwählen, die keinem gültigen Wert in Mono zugeordnet ist.Because of this, it’s possible to select a language/region combination in the iOS Settings app that does not map to a valid value in Mono. Wenn Sie z. b. die Sprache eines iPhones auf Englisch und die Region auf Spanien festlegen, werden die folgenden APIs zu unterschiedlichen Werten führen:For example, setting an iPhone’s language to English and its region to Spain will cause the following APIs to yield different values:

  • CurrentThead.CurrentCulture: en-US (Mono-API)CurrentThead.CurrentCulture: en-US (Mono API)
  • CurrentThread.CurrentUICulture: en-US (Mono-API)CurrentThread.CurrentUICulture: en-US (Mono API)
  • NSLocale.CurrentLocale.LocaleIdentifier: en_ES (Apple-API)NSLocale.CurrentLocale.LocaleIdentifier: en_ES (Apple API)

Da Mono CurrentThread.CurrentUICulture zum Auswählen von Ressourcen und CurrentThread.CurrentCulture zum Formatieren von Datums-und Währungswerten verwendet, liefert Mono-basierte Lokalisierung (z. b. mit RESX-Dateien) möglicherweise nicht die erwarteten Ergebnisse für diese Kombinationen von Sprache und Region.Since Mono uses CurrentThread.CurrentUICulture to select resources and CurrentThread.CurrentCulture to format dates and currencies, Mono-based localization (for example, with .resx files) may not yield expected results for these language/region combinations. In diesen Fällen müssen Sie die Apple-APIs für die Lokalisierung nach Bedarf nutzen.In these situations, rely on Apple's APIs to localize as necessary.

NscurrentlocaledidchangenotifizierungNSCurrentLocaleDidChangeNotification

IOS generiert eine, NSCurrentLocaleDidChangeNotification Wenn der Benutzer sein Gebiets Schema aktualisiert.iOS generates an NSCurrentLocaleDidChangeNotification when the user updates their locale. Anwendungen können diese Benachrichtigung während der Ausführung überwachen und entsprechende Änderungen an der Benutzeroberfläche vornehmen.Applications can listen for this notification while they are running and can make appropriate changes to the UI.

Grundlagen der Lokalisierung in iosLocalization basics in iOS

Die folgenden Funktionen von IOS können problemlos in xamarin genutzt werden, um dem Benutzer lokalisierte Ressourcen für die Anzeige bereitzustellen.The following features of iOS are easily leveraged in Xamarin to provide localized resources for display to the user. Weitere Informationen zur Implementierung dieser Ideen finden Sie im TaskyL10n-Beispiel .Refer to the TaskyL10n sample to see how to implement these ideas.

Angeben von standardmäßigen und unterstützten Sprachen in "Info. plist"Specifying default and supported languages in Info.plist

In Technical Q&A QA1828: wie IOS die Sprache für Ihre APP bestimmt, beschreibt Apple, wie IOS eine Sprache für die Verwendung in einer App auswählt.In Technical Q&A QA1828: How iOS Determines the Language For Your App, Apple describes how iOS selects a language to use in an app. Die folgenden Faktoren wirken sich auf die angezeigte Sprache aus:The following factors impact which language is displayed:

  • Die bevorzugten Sprachen des Benutzers (in der App " Einstellungen " gefunden)The user's preferred languages (found in the Settings app)
  • Die mit der APP (lproj-Ordner) gebündelten Lokalisierungs-The localizations bundled with the app (.lproj folders)
  • CFBundleDevelopmentRegion(Info. plist -Wert, der die Standardsprache für die APP angibt)CFBundleDevelopmentRegion (Info.plist value specifying the default language for the app)
  • CFBundleLocalizations(Info. plist -Array, das alle unterstützten Lokationen angibt)CFBundleLocalizations (Info.plist array specifying all supported localizations)

Wie im technischen Q-&A angegeben, CFBundleDevelopmentRegion stellt die Standard Region und die Sprache einer APP dar.As indicated in the Technical Q&A, CFBundleDevelopmentRegion represents an app's default region and language. Wenn die APP die bevorzugten Sprachen eines Benutzers nicht explizit unterstützt, wird die in diesem Feld angegebene Sprache verwendet.If the app doesn't explicitly support any of a user's preferred languages, it will use the language specified by this field.

Wichtig

IOS 11 wendet diesen Sprachauswahl Mechanismus strenger an als frühere Versionen des Betriebssystems.iOS 11 applies this language selection mechanism more strictly than did previous versions of the operating system. Aus diesem Grund wird für jede IOS 11-APP, die ihre unterstützten Lokationen nicht explizit deklariert – entweder durch Einschließen von lproj-Ordnern oder durch Festlegen eines Werts für –, unter CFBundleLocalizations Umständen eine andere Sprache als IOS 10 angezeigt.Because of this, any iOS 11 app that does not explicitly declare its supported localizations – either by including .lproj folders or setting a value for CFBundleLocalizations – may display a different language in iOS 11 than it did in iOS 10.

Wenn CFBundleDevelopmentRegion nicht in der Info. plist -Datei angegeben wurde, verwenden die xamarin. IOS-Buildtools aktuell den Standardwert en_US .If CFBundleDevelopmentRegion has not been specified in the Info.plist file, the Xamarin.iOS build tools currently use a default value of en_US. Dies kann sich in einer zukünftigen Version ändern, bedeutet aber, dass die Standardsprache Englisch ist.While this may change in a future release, it means that the default language is English.

Führen Sie die folgenden Schritte aus, um sicherzustellen, dass Ihre APP eine erwartete Sprache auswählt:To ensure that your app selects an expected language, take the following steps:

  • Geben Sie eine Standardsprache an.Specify a default language. Öffnen Sie " Info. plist ", und verwenden Sie die Quell Ansicht, um einen Wert für den Schlüssel festzulegen. CFBundleDevelopmentRegion in XML sollte Sie in etwa wie folgt aussehen:Open Info.plist and use the Source view to set a value for the CFBundleDevelopmentRegion key; in XML, it should look similar to the following:
<key>CFBundleDevelopmentRegion</key>
<string>es</string>

In diesem Beispiel wird "es" verwendet, um anzugeben, dass, wenn keine der bevorzugten Sprachen eines Benutzers unterstützt wird, der Standardwert Spanisch ist.This example uses “es” to specify that when none of a user’s preferred languages are supported, default to Spanish.

  • Deklarieren Sie alle unterstützten Lokalisierungs-.Declare all supported localizations. Verwenden Sie in der Datei " Info. plist" die Quell Ansicht, um ein Array für den Schlüssel festzulegen. CFBundleLocalizations in XML sollte es in etwa wie folgt aussehen:In Info.plist, use the Source view to set an array for the CFBundleLocalizations key; in XML, it should look similar to the following:
<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>es</string>
    ...
</array>

Xamarin. IOS-apps, die mit .net-Mechanismen wie RESX-Dateien lokalisiert wurden, müssen diese Info. plist -Werte ebenfalls bereitstellen.Xamarin.iOS apps that have been localized using .NET mechanisms such as .resx files must provide these Info.plist values as well.

Weitere Informationen zu diesen Info. plist -Schlüsseln finden Sie in der Apple-Referenz für die Informations Eigenschaften Liste.For more information about these Info.plist keys, take a look at Apple's Information Property List Key Reference.

GetLocalizedString-MethodeGetLocalizedString method

Die- NSBundle.MainBundle.GetLocalizedString Methode sucht nach lokalisiertem Text, der in Strings -Dateien im Projekt gespeichert wurde.The NSBundle.MainBundle.GetLocalizedString method looks up localized text that has been stored in .strings files in the project. Diese Dateien sind nach Sprache organisiert, in speziell benannten Verzeichnissen mit einem lproj -Suffix (Beachten Sie, dass der erste Buchstabe der Erweiterung ein Kleinbuchstabe "L" ist).These files are organized by language, in specially named directories with an .lproj suffix (note the first letter of the extension is a lower-case "L").

Speicherorte für. Strings-Dateien.strings file locations

  • Base. lproj ist das Verzeichnis, das Ressourcen für die Standardsprache enthält.Base.lproj is the directory that contains resources for the default language. Sie befindet sich häufig im Stammverzeichnis des Projekts (kann aber auch im Ordner " Resources " abgelegt werden).It is often located in the project root (but can also be placed in the Resources folder).
  • ** < Language > . lproj** -Verzeichnisse werden für jede unterstützte Sprache erstellt, in der Regel im Ordner " Resources ".<language>.lproj directories are created for each supported language, usually in the Resources folder.

In jedem Sprachverzeichnis können mehrere verschiedene Strings -Dateien vorhanden sein:There can be a number of different .strings files in each language directory:

  • Lokalisier bare Zeichen folgen – die Hauptliste lokalisierter Text.Localizable.strings – the main list of localized text.
  • Infoplist. Strings – bestimmte spezifische Schlüssel sind in dieser Datei zulässig, um Dinge wie den Anwendungsnamen zu übersetzen.InfoPlist.strings – certain specific keys are allowed in this file to translate things such as the application name.
  • ** <storyboard-name> . Strings** – optionale Datei, die Übersetzungen für Elemente der Benutzeroberfläche in einem Storyboard enthält.<storyboard-name>.strings – optional file that contains translations for user interface elements in a storyboard.

Die Buildaktion für diese Dateien sollte eine Bundle-Ressourcesein.The Build Action for these files should be Bundle Resource.

. Strings-Dateiformat.strings file format

Die Syntax für lokalisierte Zeichen folgen Werte lautet:The syntax for localized string values is:

/* comment */
"key"="localized-value";

Sie sollten die folgenden Zeichen in Zeichen folgen mit Escapezeichen versehen:You should escape the following characters in strings:

  • \"ATS\" quote
  • \\umgekehrten Schrägstrich\\ backslash
  • \nZeilenumbruch\n newline

Dies ist ein Beispiel für es/lokalisierbare. Strings (d.h. Spanisch) aus dem Beispiel:This is an example es/Localizable.strings (ie. Spanish) file from the sample:

"<new task>" = "<new task>";
"Task Details" = "Detalles de la tarea";
"Name" = "Nombre";
"task name" = "nombre de la tarea";
"Notes" = "Notas";
"other task info"= "otra información de tarea";
"Done" = "Completo";
"Save" = "Guardar";
"Delete" = "Eliminar";

AbbilderImages

So lokalisieren Sie ein Image in ios:To localize an image in iOS:

  1. Sehen Sie sich das Image im Code an, z. b.:Refer to the image in code, for example:

    UIImage.FromBundle("flag");
    
  2. Platzieren Sie die Standard Abbild Datei flag.png in base. lproj (dem Verzeichnis der systemeigenen Entwicklungssprache).Place the default image file flag.png in Base.lproj (the native development language directory).

  3. Platzieren Sie optional lokalisierte Versionen des Bilds in lproj -Ordnern für jede Sprache (z. b.Optionally place localized versions of the image in .lproj folders for each language (eg. es. lproj, Ja. lproj).es.lproj, ja.lproj). Verwenden Sie in jedem Sprachverzeichnis denselben Dateinamen flag.png .Use the same filename flag.png in each language directory.

Wenn ein Bild nicht für eine bestimmte Sprache vorhanden ist, greift IOS auf den standardmäßigen systemeigenen Sprachordner zurück und lädt das Image von dort.If an image is not present for a particular language, iOS will fall back to the default native language folder and load the image from there.

Start BilderLaunch images

Verwenden Sie die Standard Benennungs Konventionen für die Start Images (und XIb oder Storyboard für iPhone 6-Modelle), wenn Sie diese in den lproj -Verzeichnissen für jede Sprache platzieren.Use the standard naming conventions for the launch images (and the XIB or Storyboard for iPhone 6 models) when placing them in the .lproj directories for each language.

Default.png
Default@2x.png
Default-568h@2x.png
LaunchScreen.xib

App-NameApp name

Wenn Sie eine infoplist. Strings -Datei in einem lproj -Verzeichnis platzieren, können Sie einige Werte aus der Info. plist-Datei der APP außer Kraft setzen, einschließlich des Anwendungs namens:Placing an InfoPlist.strings file in an .lproj directory lets you override some values from the app's Info.plist, including the application name:

"CFBundleDisplayName" = "LeónTodo";

Weitere Schlüssel zum Lokalisieren von anwendungsspezifischen Zeichen folgen sind:Other keys that you can use to localize application-specific strings are:

  • CfbundlenameCFBundleName
  • CFBundleShortVersionStringCFBundleShortVersionString
  • NshumanumablecopyrightNSHumanReadableCopyright

Datums- und ZeitangabenDates and times

Obwohl es möglich ist, die integrierten .net-Datums-und Uhrzeit Funktionen (zusammen mit dem aktuellen CultureInfo ) zu verwenden, um Datumsangaben und Uhrzeiten für ein Gebiets Schema zu formatieren, werden dadurch Gebiets Schema spezifische Benutzereinstellungen ignoriert (die separat von der Sprache festgelegt werden können).Although it is possible to use the built-in .NET date and time functions (along with the current CultureInfo) to format dates and times for a locale, this would ignore locale-specific user-settings (which can be set separately from language).

Verwenden Sie IOS NSDateFormatter , um eine Ausgabe zu erhalten, die der Gebiets Schema Einstellung des Benutzers entspricht.Use the iOS NSDateFormatter to produce output that matches the user's locale preference. Der folgende Beispielcode veranschaulicht die grundlegenden Formatierungsoptionen für Datum und Uhrzeit:The following sample code demonstrates the basic date and time formatting options:

var date = NSDate.Now;
var df = new NSDateFormatter ();
df.DateStyle = NSDateFormatterStyle.Full;
df.TimeStyle = NSDateFormatterStyle.Long;
Debug.WriteLine ("Full,Long: " + df.StringFor(date));
df.DateStyle = NSDateFormatterStyle.Short;
df.TimeStyle = NSDateFormatterStyle.Short;
Debug.WriteLine ("Short,Short: " + df.StringFor(date));
df.DateStyle = NSDateFormatterStyle.Medium;
df.TimeStyle = NSDateFormatterStyle.None;
Debug.WriteLine ("Medium,None: " + df.StringFor(date));

Ergebnisse für Englisch in der USA:Results for English in the United States:

Full,Long: Friday, August 7, 2015 at 10:29:32 AM PDT
Short,Short: 8/7/15, 10:29 AM
Medium,None: Aug 7, 2015

Ergebnisse für Spanisch in Spanien:Results for Spanish in Spain:

Full,Long: viernes, 7 de agosto de 2015, 10:26:58 GMT-7
Short,Short: 7/8/15 10:26
Medium,None: 7/8/2015

Weitere Informationen finden Sie in der Dokumentation zu den Apple Date Formatters .Refer to the Apple Date Formatters documentation for more information. Beim Testen der Gebiets Schema bezogenen Datums-und Uhrzeit Formatierung überprüfen Sie die Einstellungen der iPhone-Sprache und- Region .When testing locale-sensitive date and time formatting, check both iPhone Language and Region settings.

Layout von rechts nach links (RTL)Right-to-Left (RTL) layout

IOS bietet eine Reihe von Features zur Unterstützung beim Entwickeln von apps, die auf RTL-Unterstützung aufbauen:iOS provides a number of features to assist in building RTL-aware apps:

  • Verwenden Sie das-Attribut und das-Attribut des automatischen Layouts leading für die Ausrichtung des Steuer Elements trailing (das von Links und rechts für Englisch entspricht, jedoch für RTL-Sprachen umgekehrt).Use auto layout's leading and trailing attributes for control alignment (which corresponds to left and right for English, but is reversed for RTL languages). Das- UIStackView Steuerelement ist besonders nützlich zum Anordnen von Steuerelementen, die von RTL unterstützt werden.The UIStackView control is particularly useful for laying out controls to be RTL-aware.
  • Verwenden Sie TextAlignment = UITextAlignment.Natural für die Textausrichtung (die für die meisten Sprachen, aber Recht für RTL belassen wird).Use TextAlignment = UITextAlignment.Natural for text alignment (which will be left for most languages but right for RTL).
  • UINavigationControllerkehrt die Schaltfläche "zurück" automatisch um und kehrt die Richtung um.UINavigationController automatically flips the back button and reverses swipe direction.

Die folgenden Screenshots zeigen das lokalisierte Tasky-Beispiel in Arabisch und Hebräisch an (Obwohl Englisch in den Feldern eingegeben wurde):The following screenshots show the localized Tasky sample in Arabic and Hebrew (although English has been entered in the fields):

Lokalisierung auf ArabischLocalization in Arabic

Lokalisierung in HebräischLocalization in Hebrew

IOS kehrt automatisch zurück UINavigationController , und die anderen Steuerelemente werden in das UIStackView automatische Layout eingefügt oder darauf ausgerichtet.iOS automatically reverses the UINavigationController, and the other controls are placed inside UIStackView or aligned with Auto-Layout. Der RTL-Text wird mithilfe von . Strings -Dateien auf dieselbe Weise wie der Ltr-Text lokalisiert.RTL text is localized using .strings files in the same way as LTR text.

Lokalisieren der Benutzeroberfläche in CodeLocalizing the UI in code

Im Beispiel Tasky (lokalisiert in Code) wird gezeigt, wie Sie eine Anwendung lokalisieren, bei der die Benutzeroberfläche in Code (anstelle von XIb oder Storyboards) erstellt wird.The Tasky (localized in code) sample shows how to localize an application where the user-interface is built in code (rather than XIBs or storyboards).

ProjektstrukturProject Structure

Ressourcenstruktur

Lokalisierbare Strings-DateiLocalizable.strings file

Wie oben beschrieben, besteht das Lokalisierbare Strings -Dateiformat aus Schlüssel-Wert-Paaren.As described above, the Localizable.strings file format consists of key-value pairs. Der Schlüssel beschreibt die Absicht der Zeichenfolge, und der Wert ist der übersetzte Text, der in der APP verwendet werden soll.The key describes the intent of the string and the value is the translated text to be used in the app.

Die Spanisch (es)-Lokationen für das Beispiel sind unten dargestellt:The Spanish (es) localizations for the sample are shown below:

"<new task>" = "<new task>";
"Task Details" = "Detalles de la tarea";
"Name" = "Nombre";
"task name" = "nombre de la tarea";
"Notes" = "Notas";
"other task info"= "otra información de tarea";
"Done" = "Completo";
"Save" = "Guardar";
"Delete" = "Eliminar";

Durchführen der LokalisierungPerforming the localization

Wenn im Anwendungscode der Anzeige Text einer Benutzeroberfläche festgelegt ist (unabhängig davon, ob es sich um einen Bezeichnungs Text oder einen Platzhalter der Eingabe handelt usw.), verwendet der Code die IOS- GetLocalizedString Funktion, um die richtige Übersetzung zum Anzeigen abzurufen:In the application code, wherever a user interface's display text is set (whether it is a label's text, or an input's placeholder, etc) the code uses the iOS GetLocalizedString function to retrieve the correct translation to display:

var localizedString = NSBundle.MainBundle.GetLocalizedString ("key", "optional");
someControl.Text = localizedString;

Lokalisieren von Storyboard-UIsLocalizing storyboard UIs

Das Beispiel Tasky (lokalisiertes Storyboard) zeigt, wie Text in Steuerelementen in einem Storyboard lokalisiert wird.The sample Tasky (localized storyboard) shows how to localize text on controls in a storyboard.

ProjektstrukturProject structure

Das Verzeichnis " base. lproj " enthält das Storyboard und sollte auch alle Bilder enthalten, die in der Anwendung verwendet werden.The Base.lproj directory contains the storyboard, and should also contain any images used in the application.

Die anderen sprach Verzeichnisse enthalten eine Lokalisierbare Strings -Datei für alle Zeichen folgen Ressourcen, auf die im Code verwiesen wird, sowie die Datei " mainstoryboard. Strings ", die Übersetzungen für Text im Storyboard enthält.The other language directories contain a Localizable.strings file for any string resources referenced in code, as well as a MainStoryboard.strings file that contains translations for text in the storyboard.

Ressourcenstruktur

Die sprach Verzeichnisse sollten eine Kopie aller lokalisierten Bilder enthalten, um die in " base. lproj" vorhandene Grafik zu überschreiben.The language directories should contain a copy of any images that have been localized, to override the one present in Base.lproj.

Objekt-ID/Lokalisierungs-IDObject ID / Localization ID

Wenn Sie Steuerelemente in einem Storyboard erstellen und bearbeiten, wählen Sie jedes Steuerelement aus, und überprüfen Sie die ID für die Lokalisierung:When creating and editing controls in a storyboard, select each control and check the ID to use for localization:

  • In Visual Studio für Mac befindet er sich im Eigenschaftenpad und wird als Lokalisierungs- IDbezeichnet.In Visual Studio for Mac, it's located in the Properties Pad and is called Localization ID.
  • In Xcode wird Sie als Objekt-IDbezeichnet.In Xcode, it's called Object ID.

Dieser Zeichen folgen Wert hat häufig ein Formular wie z. b. "NF3-h8-XMR", wie im folgenden Screenshot zu sehen:This string value often has a form such as "NF3-h8-xmR", as shown in the following screenshot:

Xcode-Ansicht der Storyboard-Lokalisierung

Dieser Wert wird in der Strings -Datei verwendet, um jedem Steuerelement automatisch übersetzten Text zuzuweisen.This value is used in the .strings file to assign translated text automatically to each control.

Mainstoryboard. StringsMainStoryboard.strings

Das Format der Storyboard-Übersetzungsdatei ähnelt der lokalisierbaren Strings -Datei, mit der Ausnahme, dass der Schlüssel (der Wert auf der linken Seite) Nichtbenutzer definiert sein kann, sondern ein sehr spezifisches Format aufweisen muss: ObjectID.property .The format of the storyboard translation file is similar to the Localizable.strings file, except that the key (the value on the left) cannot be user-defined but instead must have a very specific format: ObjectID.property.

Im Beispiel mainstoryboard. Strings unten sehen Sie UITextField , dass s über eine placeholder Text Eigenschaft verfügen, die lokalisiert UILabel werden kann. s weisen eine text -Eigenschaft auf, und UIButton s-Standardtext wird mithilfe von festgelegt normalTitle :In the example Mainstoryboard.strings below you can see UITextFields have a placeholder text property that can be localized; UILabels have a text property; and UIButtons default text is set using normalTitle:

"SXg-TT-IwM.placeholder" = "nombre de la tarea";
"Pqa-aa-ury.placeholder"= "otra información de tarea";
"zwR-D9-hM1.text" = "Detalles de la tarea";
"bAM-2j-Rzw.text" = "Notas";           /* Notes */
"NF3-h8-xmR.text" = "Completo";        /* Done */
"MWt-Ya-pMf.normalTitle" = "Guardar";  /* Save */
"IGr-pR-05L.normalTitle" = "Eliminar"; /* Delete */

Wichtig

Die Verwendung eines Storyboards mit Größenklassen kann zu Übersetzungen führen, die in der Anwendung nicht angezeigt werden.Using a storyboard with size classes may result in translations that do not appear in the application. Die Xcode-Versions Anmerkungen von Apple geben an, dass ein Storyboard oder XIb nicht ordnungsgemäß lokalisiert wird, wenn drei Dinge zutreffen: es verwendet Größenklassen, die Basis Lokalisierung und das Buildziel werden auf Universal festgelegt, und der Build zielt auf IOS 7,0 ab.Apple's Xcode Release Notes indicate that a storyboard or XIB will not localize correctly if three things are true: it uses size classes, the base localization and the build target are set to Universal, and the build targets iOS 7.0. Die Korrektur besteht darin, die storyboardzeichenfolgen-Datei in zwei identische Dateien zu duplizieren: mainstoryboard ~ iPhone. Strings und mainstoryboard ~ iPad. Strings, wie im folgenden Screenshot zu sehen:The fix is to duplicate your storyboard strings file into two identical files: MainStoryboard~iphone.strings and MainStoryboard~ipad.strings, as shown in the following screenshot:

Zeichen folgen Dateien

App Store-AuflistungApp Store listing

Nachfolgend finden Sie häufig gestellte Fragen zur Lokalisierung von App Stores , um Übersetzungen für jedes Land einzugeben, in dem Ihre APP verkauft wird.Follows Apple's FAQ on App Store Localization to enter translations for each country your app is on sale. Beachten Sie die Warnung, dass die Übersetzungen nur angezeigt werden, wenn Ihre APP auch ein lokalisiertes lproj -Verzeichnis für die Sprache enthält.Note their warning that the translations will only appear if your app also contains a localized .lproj directory for the language.

ZusammenfassungSummary

In diesem Artikel werden die Grundlagen der Lokalisierung von IOS-Anwendungen mithilfe der integrierten ressourcenverarbeitungs-und storyboardfeatures behandelt.This article covers the basics of localizing iOS applications using the built-in resource handling and storyboard features.

Weitere Informationen zu i18n und l10n für IOS-, Android-und plattformübergreifende Apps (einschließlich xamarin. Forms) finden Sie in diesem plattformübergreifenden Leitfaden.You can learn more about i18n and L10n for iOS, Android and cross-platform apps (including Xamarin.Forms) in this cross-platform guide.