Mehrsprachige App Localisation über Button einstellen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mehrsprachige App Localisation über Button einstellen

    Moin Moin erstmal! 8o

    Ich würde meine App gerne internationalisieren und bin dabei bei Recherchen schon auf die Möglichkeit der Localisation und auch der Storyboard-Localisation gestoßen, um sowohl feste Labels als auch andere Texte wie zum Beispiel Alerts mehrsprachig anzubieten.

    Nun möchte ich aber, dass sich die Sprache nicht einer Systemeinstellung, sondern einem Button oder multi-Button, der zum Beispiel <de> oder <en> in einer Variable speichert, anpasst.

    mich kann so eine Erklärung aber nirgendwo finden. Kennt da jemand ein Tutorial oder kann mir ein Code Beispiel empfehlen?

    Vielen Dank im Vorraus! :D


    Mit freundlichen Grüßen
    Steffen
  • Warum sollte man das wollen? Sowohl aus Sicht der UX als auch wegen des Entwicklungsaufwandes halte ich das für eine ganz schlechte Idee.

    Aber egal: Du könntest Dir eine Klasse schreiben, die alle Lokalisierungen händelt, gefüttern aus plists oder ähnlichem. Dein User-Interface baust Du dann entweder komplett programmatisch auf oder hast Outlets sämtlicher Texte. Beim Wechsel der Sprache musst Du dann alle ViewController informieren, damit sie geänderte Strings lesen. Oder du beendest - wie Apple - die App.

    Mein Credo: Lass es :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Warum sollte man das wollen? Sowohl aus Sicht der UX als auch wegen des Entwicklungsaufwandes halte ich das für eine ganz schlechte Idee.

    Aber egal: Du könntest Dir eine Klasse schreiben, die alle Lokalisierungen händelt, gefüttern aus plists oder ähnlichem. Dein User-Interface baust Du dann entweder komplett programmatisch auf oder hast Outlets sämtlicher Texte. Beim Wechsel der Sprache musst Du dann alle ViewController informieren, damit sie geänderte Strings lesen. Oder du beendest - wie Apple - die App.

    Mein Credo: Lass es :)

    Mattes
    Vielen Dank erstmal für deine Stellungnahme. Da ich selber noch relativ unerfahren bin: Erstmal vielen Dank für den Tipp! :)

    Wenn ich eine normale Localization mache hätte ich aber ein anderes Problem:

    Ich würde auch gerne sprachspezifischen Ausios ausgeben. Wäre es möglich irgendwo die Sprache abzugreifen?

    Ich würde es nämlich dann gerne eine Datei mit dem Namen xyz_[sprachauswahl] abspielen.

    vielleicht kannst du mir da ja einen Denkanstoß geben und weißt, woher ich die Information ziehen könnte.

    LG
    ^^ Steffen
  • Du würdest die Audio-Datei ja z. B. aus dem App-Bundle laden. Niemand hindert Dich, den Dateinamen zu lokalisieren und so die Standardfunktionen (NSLocalizedString o. ä.) für die Pfadermittlung zu verwenden.

    Alternativ kannst Du über NSLocale Informationen zu den Benutzereinstellungen abfragen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Du würdest die Audio-Datei ja z. B. aus dem App-Bundle laden. Niemand hindert Dich, den Dateinamen zu lokalisieren und so die Standardfunktionen (NSLocalizedString o. ä.) für die Pfadermittlung zu verwenden.

    Alternativ kannst Du über NSLocale Informationen zu den Benutzereinstellungen abfragen.

    Mattes

    Also wenn ich zum Beispiel die Dateien auto_de.mp3 und auto_en.mp3 ablegen würde. Dann könnte ich ja zb den Namen später so erzeugen:

    audiodatei = auto_[region]

    Weißt du zufällig auf angibt was ich für [region] einsetzen müsste?

    LG
    Steffen
  • MCDan schrieb:

    Du kannst die Audio Datei auch direkt lokalisieren und für jede, in der App, unterstützte Sprache dann eine eigene Datei verwenden. ;)

    Mit zusammengesetzten Filenamen brauchst Du da nicht hantieren. Dies erledigt alles das App Bundle für Dich.
    Achso ok! Und wie kann man Aufio Dateien lokalisieren? Bei Text gibt es ja die Datei mit den Stickworten.
  • Ich meinte eigentlich direkt lokalisierte Resource Dateien im App Bundle.

    Dazu wählst Du in Xcode die Datei aus und verwendest im File Inspector unter Localization den Button Localize...

    Du kannst dann aussuchen für welche unterstützten Sprachen in der App Du eine lokalisierte Version der Resource Datei verwenden möchtest.

    Xcode kopiert/verschiebt die Dateien dann in die entsprechenden .lproj Verzeichnisse der ausgewählten Sprachen.

    Wenn Du eine Datei initial lokalisierst, dann werden Kopien dieser Datei in den jeweiligen .lproj Verzeichnisse der ausgewählten Sprachen erstellt.

    Du kannst diese Dateien dann einfach mit der jeweiligen Sprachversion ersetzen.

    Wenn Du einen Asset Catalog für die Resource Dateien verwendest, dann kannst Du die einzelnen Einträge über den Attributes Inspector lokalisieren. Dies habe ich allerdings noch nicht verwendet und hoffe, dass es dann auch funktioniert. ;)
  • MCDan schrieb:

    Ich meinte eigentlich direkt lokalisierte Resource Dateien im App Bundle.

    Dazu wählst Du in Xcode die Datei aus und verwendest im File Inspector unter Localization den Button Localize...

    Du kannst dann aussuchen für welche unterstützten Sprachen in der App Du eine lokalisierte Version der Resource Datei verwenden möchtest.

    Xcode kopiert/verschiebt die Dateien dann in die entsprechenden .lproj Verzeichnisse der ausgewählten Sprachen.

    Wenn Du eine Datei initial lokalisierst, dann werden Kopien dieser Datei in den jeweiligen .lproj Verzeichnisse der ausgewählten Sprachen erstellt.

    Du kannst diese Dateien dann einfach mit der jeweiligen Sprachversion ersetzen.

    Wenn Du einen Asset Catalog für die Resource Dateien verwendest, dann kannst Du die einzelnen Einträge über den Attributes Inspector lokalisieren. Dies habe ich allerdings noch nicht verwendet und hoffe, dass es dann auch funktioniert. ;)
    das klingt wirklich sehr gut. Ich werde mich mal an der Umsetzung versuchen.

    Vielen Dank!
  • Vorab: Telegram kann das. Es filtert die eingerichteten Sprachen des Systems und lässt eine Nutzerentscheidung zu, wenn es merkt, dass die Hauptsprache geändert wurde.

    MyMattes schrieb:

    Warum sollte man das wollen? Sowohl aus Sicht der UX als auch wegen des Entwicklungsaufwandes halte ich das für eine ganz schlechte Idee.

    Mein Credo: Lass es
    Einen Anwendungsfall aus dem echten Leben hätte ich da.
    Ich bin aktuell dabei Spanisch zu lernen und mittlerweile an einer Schwelle angekommen, an der ich Kleinkram auf Spanisch lesen und nutzen kann, um das Lernen zu intensivieren.
    Entsprechend steht das iPhone auf "Spanisch" mit den weiteren Optionen "Deutsch" und "Englisch".

    Daher weiß ich auch ziemlich genau, wie sich Telegram verhält, wenn mittendrin die Sprache gewechselt wird. ;)

    Viele Anwendungen, vor Allem die Servergestützten wie Xing oder LinkedIn, basteln Dir einen Sprach-Mischmasch ins System, der absolut erschreckend unübersichtlich ist.
    Hier würde ich mir wünschen, dass ich Xing auf Deutsch und LinkedIn auf Englisch stellen könnte, damit der Kram aus UX Sicht mal ein bisschen Konsistenz hat.

    Genau das macht Telegram: Dir die Möglichkeit bieten, die App insgesamt auf die Sprache zu stellen, in der die Masse Deiner Kontakte kommuniziert.
    Meiner Meinung nach ein valider Anwendungsfall für diesen ganzen Aufwand.


    Zur Lokalisierung von Dateien hingegen völliger Overhead.
    Selbst wenn Du die Dateien von einem Server ziehen müsstest, was dann wieder zurück zu dieser Frage führt:

    Steffen schrieb:

    Weißt du zufällig auf angibt was ich für [region] einsetzen müsste?

    Quellcode

    1. // Aktuelle Lokalisierungen holen. Ändert sich bei jeder Anpassung in den Systemeinstellungen
    2. let locale = NSLocale.autoupdatingCurrent
    3. // Sprachcode wie "de", "fr_FR", "en_US", "az-Arab" oder "zh-Hans_HK" aus der Locale holen.
    4. let region = locale.languageCode!
    5. // Hier musst Du dann gegebenenfalls alles entsprechend einkürzen, damit das passt.
    6. // Obacht! Es gibt Unterschiede zum Beispiel zwischen "es-ES" (Castellano) und "es-MX" (Mexikanisch)
    7. // sowohl in Schreiweise
    8. // "cangrejo" (Castellano) vs. "cangrexo" (Mexikanisch) für Krabbe wird beides gleich ausgesprochen.
    9. // Ja, auf Mexikanisch heißt Mexico wirklich "mechiko".
    10. // Stammt von Galizisch ab, das in etwa einem Viertel Spaniens gesprochen wird und dessen Sprachcode "gl" ganz offensichtlich keine Verwechslung zum Spanischen zulässt
    11. // als auch in Aussprache
    12. // "mujer" (Castellano) gesprochen mit 'ch' vs. "muller" (Mexikanisch) gesprochen mit 'j' für Frau
    13. // Zu viel herauskürzen kann also unter Umständen von Nachteil sein.
    Alles anzeigen
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Marco Feltmann ()

  • MyMattes schrieb:

    @Marco Feltmann: Aber Du kannst doch in den iOS-Einstellungen applikationsspezifisch eine Sprache festlegen ... warum sollte ich (neben entsprechender Lokalisierung) eine Sprachauswahl in der App selber realisieren?

    Mattes
    Um dem unbedarften Nutzer bei der Einstellung zu unterstützen. Ich kenne das Feature jetzt seit etwa 25 Sekunden. ;)
    Offenbar muss dazu explizit Localization unterstützt werden, denn bei einigen Apps geht das nicht. TED zum Beispiel.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • MCDan schrieb:

    Aha, wie/wo geht dies denn? ?(
    Wenn Du in den iOS-Einstellungen - dort auch das Settings-Bundle gezogen würde - in die Einstellungen einer App mit Lokalisierung gehst: Standardmässig wird die systemweite Sprache verwendet, aber Du kannst eine andere aus den unterstützten Lokalisierungen wählen.

    Allerdings wird die App nicht - wie bei systemweiten Änderungen - beendet, so dass man sie "abschießen" muss, um die Änderung zu sehen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.