Swift 5 Übersetzung per API?

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

  • Swift 5 Übersetzung per API?

    Guten Abend zusammen,

    wir sind gerade dabei ein App zu programmieren die in unterschiedlichen Sprachen übersetzt werden soll. Anfangs meinte unser Programmierer noch, dass es problemlos möglich sei, die Übersetzungen über unser Admin Panel zu verwalten und per API von der App aus zuzugreifen. So wollten wir sicherstellen, dass wir nicht jedes Mal eine neue Version pushen müssen. Jetzt kurz vor Fertigstellung behauptet er genau das Gegenteil, das es eine Limitierung in Switft sei die Übersetzungen nicht per API zu ziehen. Wir nutzen einen nodejs Server in Verbindung mit einer MariaDB Datenbank. Gibt es hierfür eine Möglichkeit oder müssen wir hier auf externe Anbieter zurückgreifen oder ist das wirklich nicht möglich?


    Vielen Dank vorab!
  • Die App ist ohne aktive Internetverbindung eigentlich eh nicht nutzbar. Also wäre das aus unserer Sicht vertretbar. Der Grund hierfür, weil wir relativ häufige Anpassungen vornehmen würden, da wir es nicht nur für Übersetzungen verwenden, sondern auch für Text Anpassungen, Angebote etc.

    In anderen Bereichen machen wir das ähnlich wo wir unsere translation (text) keys verwenden und alle Texte Zentral über unser Management Interface verwalten.

    Darf ich mal blöd fragen, gibt es irgendwo ein geeignetes HowTo bzw. eine Beschreibung wie man das integrieren müsste? Ich würde mich hier gerne einlesen um eine Diskussion mit unserem Entwickler führen zu können. Leider habe ich selbst noch nichts mit Swift gemacht, weswegen ich hier Wissenslücken aufweise.

    Das wäre ja die Standard Methode, wenn ich mich nicht täusche, sowas in der Art bräuchte ich jetzt für eine API Integration.
    developer.apple.com/library/ar…ple_ref/doc/uid/10000171i

    VG
  • yockl schrieb:

    Das wäre ja die Standard Methode, wenn ich mich nicht täusche, sowas in der Art bräuchte ich jetzt für eine API Integration.
    Du fragst nach einer "Localization-API", meinst aber nach meinem Verständnis eine API zur Anbindung von zentralen Datenbanken ... nur, dass Du in Deinem Fall dort übersetzte Strings halten möchtest. Ein paar Gedanken dazu:
    • Alle Übersetzungen sind durch String-Zuweisungen möglich, aber das Programm muss entsprechend aufgebaut sein.
    • Diese Texte können auch aus einer entfernten Datenbank kommen, aber dann muss man m. E. die Lokalisierung mit eigenen Mitteln nachbauen: Übernahme der System-Präferenzen inkl. Reihenfolge, Defaults, ...
    • Datenbankanbindungen erfolgen üblicherweise über Abstraktionsschichten wie REST. Alternativ könnte auch eine lokale DB benutzt werden, die sich im Hintergrund synchronisiert. Dies würde auch einen Offline-Betrieb ermöglichen. In diesem Zusammenhang könnte man auch Core Data / CloudKit in's Spiel bringen (könnte Kosten erzeugen und integriert sich nicht in ein bestehendes Admin-Portal).
    • Die Fragestellung nach zentral verwalteten Lokationen würde ich von Content wie Werbungen, Infotexte etc. trennen: Die Anforderungen unterscheiden sich ziemlich bzgl. Verfügbarkeit, Pflegeintervall, Autorengruppe etc.
    Ein neuer Build bei zusätzlichen Sprachen ist kein Hexenwerk, neue Lokalisierungstexte dürfte es ohne Programmänderungen kaum geben: Ich würde mir gut überlegen, hierzu eine zentrale DB zu verwenden. Vergiss' nicht, dass Eure App bei mangelnder Verfügbarkeit oder Korruption quasi tot ist...

    Mattes

    Edit: Alternativ könnte man auch z. B. beim Programmstart plists von einem Server holen und cachen. In diesen stehen dann die übersetzten Strings. Hängt etwas von Umfang und Verbreitung ab ... mir kommt das aber alles wie Stückwerk vor.
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • Mir ist der Sinn und Zweck nicht ganz klar. Geht es hier um "fixe" Texte für die App, also z.B. die Beschriftung eines "fixen" Buttons oder um Texte zum "dynamischen" Inhalt einer App, also z.B. von News Beiträgen oder sonstigem?

    Fixe Texte der App gehören ins App Bundle und die möchte das Review Team bei Apple auch sehen und prüfen. Ich könnte mir vorstellen, dass es ggf. Probleme gibt, wenn ihr dynamisch eine weiter Sprache/Lokalisierung in der App ergänzt, ohne eine neue Version der App zu erstellen und ohne dass das Review Team von Apple sich dies ansehen kann.

    Bei dynamischem Inhalt, der dann von einem Server geladen wird, sieht dies natürlich anders aus.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • Hallo zusammen,

    vielen Dank für euren Support. Also die fixen Texte wie Beschriftungen, Buttons etc. um die geht es nicht. Die werden sich auch sich nicht ändern. Hinter gewissen Feldern haben wir auch oft ein Fragezeichen mit Hilfetexten welche wir bestimmt über die Zeit anpassen werden. Hier wäre das Update auch kein Problem via Push to App Store. Aber wir haben ein paar Texte die sich fast täglich bzw. Wöchentlich aktualisieren würden. Wie z.B. ein aktualisiertes Gewinnspiel etc. Informationen die wichtig sind. Das würden oder müssten wir falls natürlich möglich von der Ferne machen. Das zweite ist, dass wir uns für solche Tasks nicht von unserem Programmierer abhängig machen möchten. Sonst müssten wir jedes Mal über ihn gehen was zwar machbar ist aber für unser Vorhaben unkomfortabel ist.

    @MyMattes:
    Edit: Alternativ könnte man auch z. B. beim Programmstart plists von einem Server holen und cachen. In diesen stehen dann die übersetzten Strings. Hängt etwas von Umfang und Verbreitung ab ... mir kommt das aber alles wie Stückwerk vor.

    Die Variante hört sich auch ziemlich interessant an. Gibt es hierzu irgendwo ein eine Dokumentation. Unser Entwickler meinte er hat das auf die Weise noch nicht gemacht und bräuchte nur ein Beispiel wie das umzusetzen wäre.
  • yockl schrieb:


    Die Variante hört sich auch ziemlich interessant an. Gibt es hierzu irgendwo ein eine Dokumentation. Unser Entwickler meinte er hat das auf die Weise noch nicht gemacht und bräuchte nur ein Beispiel wie das umzusetzen wäre.
    Ernsthaft? Dann - sorry - überlegt, den Entwickler zu wechseln: Nicht, weil er es noch nie gemacht hat, sondern weil er ein Beispiel braucht und es nicht selber googlen kann...

    Ein Ansatz: Vom Server per HTTP-Request eine Datei (oder deren Hash, Modified-Date etc.) holen und mit der lokalen Datei vergleichen. Dann ggfs. Datei asynchron laden, im Cache-Folder speichern und z. B. per NSNotification app-weit über aktualisierte Daten informieren. Sollte einen App-Entwickler nicht vor unlösbare Probleme stellen ... ich habe das einmal für Hilfetexte realisiert.

    Bleibt nur die Frage, wie hoch Eure App-Auflage ist und ob diese die Datei wirklich pullen soll? Alternativ per Push-Notification über ein Update informieren, so dass die App nur bei Bedarf den Server kontaktiert. Sauberer, aufwändiger, und hier kennen sich andere deutlich besser aus als ich.

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

    Hallo zusammen,

    vielen Dank für euren Support. Also die fixen Texte wie Beschriftungen, Buttons etc. um die geht es nicht. Die werden sich auch sich nicht ändern. Hinter gewissen Feldern haben wir auch oft ein Fragezeichen mit Hilfetexten welche wir bestimmt über die Zeit anpassen werden. Hier wäre das Update auch kein Problem via Push to App Store. Aber wir haben ein paar Texte die sich fast täglich bzw. Wöchentlich aktualisieren würden. Wie z.B. ein aktualisiertes Gewinnspiel etc. Informationen die wichtig sind. Das würden oder müssten wir falls natürlich möglich von der Ferne machen.

    Also geht es hier um dynamischen Inhalt in der App. Da sollte es dann ein passendes Backend geben, welches diesen Inhalt passend zur aktuellen Lokalisierung der App bzw. der System Locale abrufen kann. Dies ist kein Hexenwerk und sollte von dem Programmierer in Absprache mit dem Verantwortlichen für das Backend recht einfach umgesetzt werden können.

    Enthält die App bereits eine Kommunikation mit einem Server/Backend oder läuft die App aktuell komplett offline?
  • @MyMattes

    Naja ich kann es auch nicht nachvollziehen. Wir haben in der App wirklich komplexe Prozesse die problemlos funktionieren. Ich dachte anfangs er hat einfach keine Lust drauf, weil er die Texte gegen String im Nachgang austauschen muss. Aber anscheinend wäre er willig das zu machen, wenn er weiß wie. Aber vielleicht ist es doch ersteres, ich weiß es nicht.

    @MCDan

    Um ehrlich zu sein ist die App offline unbrauchbar also eher eine reine Online App. Das Backend programmiert uns auch der gleiche Entwickler mit dem wir bereits seit 5 Jahren arbeiten und eigentlich immer das Gefühl hatten 'geht nicht gibt’s nicht'. Ich kümmere mich um die komplette Definition von Systemen und der Infrastruktur. Aktuell schaut mein Setup wie folgt aus:

    1. Load Balancer
    2. Zwei Apache Webserver mit reverse proxy zum nodejs, welches das Backend beinhaltet. Das Backend wird permanent synchron gehalten, wenn wir wichtige updates am Master pushen. Jederzeit erweiterbar.
    3. Galera MariaDB Cluster mit Failover replizierung auf Standort B
    4. Minio Storage S3 Server für Medien Inhalte
    Das Ganze funktioniert bisher ohne Probleme mit dem einzigen Problem bei den Übersetzungen. Rechenpower und Reserven sind auch noch verfügbar. Wir setzen hier unsere eigenen Server ein HPE DL380P mit Xeons 2667V4 CPUs die einen guten Mix aus CPU Cores und CPU Speed bieten.

    Also alle Textstrings inklusive der Übersetzung speichern wir in der MySQL und könnten von dort aus per REST auch abgeholt werden. Wir müssen das aber auch nicht in der Datenbank haben und können Files auch einen Webserver / Backend oder wo auch immer ablegen. Wir sind sehr flexibel bei so was.
    Dateien

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

  • Da es ja nicht um die fixen Texten in der App, sondern um den dynamischen Content geht, der vom Server/Backend kommt, sehe ich das Problem nicht.

    Die App muss die Texte, die vom Server/Backend kommen, nicht übersetzen sondern einfach nur anzeigen. Beim Abrufen der Daten/Texte muss die App natürlich die gewünschte Sprache/Lokale ans Backend senden.

    Welche Daten/Texte dann vom Backend geliefert werden ist der App dann ja erstmal egal.

    Wenn die ganzen Daten/Texte vom Server/Backend lokal gecached werden, könnte es natürlich Probleme geben, wenn der Anwender die Systemsprache ändert und die lokalen Daten somit in der falschen Sprache vorliegen. Hier müsste dann ggf. der Cache gelöscht und die Daten neu vom Server geladen werden. Dass ein Anwender die Systemsprache ändert, sollte jedoch eher selten vorkommen, so dass ein erneutes Laden der Daten vom Server/Backend schon sehr selten auftreten sollte.
  • yockl schrieb:

    Hallo zusammen,

    vielen Dank für euren Support. Also die fixen Texte wie Beschriftungen, Buttons etc. um die geht es nicht. Die werden sich auch sich nicht ändern. Hinter gewissen Feldern haben wir auch oft ein Fragezeichen mit Hilfetexten welche wir bestimmt über die Zeit anpassen werden. Hier wäre das Update auch kein Problem via Push to App Store. Aber wir haben ein paar Texte die sich fast täglich bzw. Wöchentlich aktualisieren würden.


    Das ist ja was anderes. Einfach einen Server nehmen, mit einer 90 stelligen Kauderwelsch Dateiablage, auf dem die aktualisierten Dateien, inkl. Bilder, etc. sind. Bei Aufruf, das neue Zeugs lagen, in einen Cache. Bei Programmstart schauen, ob da was drin ist, falls ja, das Zeug installieren und mit neuen Bildchen und Werbetexten starten. Dann einfach Regelmässig die Files auf dem Server aktualisieren und gut ist's.

    Alternativ, geht's auch genügend komplexer ;)

    Schöne Grüsse
    Wolf