StringLocalizer BETA oder "Wenn es sonst keiner macht, dann mache ich es mir halt selbst"

  • StringLocalizer BETA oder "Wenn es sonst keiner macht, dann mache ich es mir halt selbst"

    Hi,

    da letztens erst wieder das Thema aufkam, wie man am einfachsten die Texte einer App lokalisiert und ich gerade bei meinem großen Projekt (MacAirTime) auch wieder vor dem Problem stehe, habe ich kurzerhand ein eigenes kleines Tool geschrieben, das das für mich macht.

    Das Ergebnis möchte ich euch hier als Beta-Version vorstellen, in der Hoffnung, dass der eine oder andere beim Testen hilft.

    StringLocalizer parsed das Xcode Projekt-Verzeichnis und sucht sich alle .m Files, welche im Project-Bundle integriert sind. Daraus extrahiert es alle NSLocalizedStrings Befehle und deren Texte. Gleichzeit wird nach bereits vorhandenen .lproj Verzeichnissen gesucht und für jedes Gefundene eine Sprache angelegt. Ebenfalls werden alle Localizable.strings. Dateien geparsed und die gefunden Text den Texten aus den .m Files zugeordnet.
    Auf die Art wird der aktuelle Ist-Zustand der Lokalisierung ermittelt und angezeigt.

    StringLocalizer zeigt dann alle Texte und Sprachen an. Man sieht auf einen Blick welche Texte für welche Sprache noch fehlen und kann entweder diese Texte in eine Datei exportieren um sie übersetzen zu lassen und dann wieder importieren oder auch schnell selber die Übersetzung eintippen.
    Man kann auch neue Sprachen hinzufügen. StringLocalizer erstellt dann falls nötig das entsprechende .lproj Verzeichnis nach ISO639 und eine Localizable.strings Datei, welches dann nur noch dem Xcode Projekt hinzugefügt werden muss.
    Weiterhin kann man mit einem Befehl die Texte aus dem Sourcecode einer beliebigen Sprache zuweisen, für die dann das Localizable.strings erzeugt wird.

    Besonders wichtig war mir ein schneller Workflow und eine intuitive Bedienung. Ich denke das ist mir recht gut gelungen.

    Was nicht geht sind dynamisch erzeugte Strings. Also z.B.

    Quellcode

    1. NSString *name=@"Text";
    2. NSLocalizedString(name,@"Dynamischer String");


    Aber da weiß ich auch nicht wie ich das machen sollte.

    Ebenfalls noch nicht glücklich bin ich mit dem Format der Export- und Import Dateien. Hier hätte ich einerseits gerne was standardisiertes, andererseits aber etwas möglichst einfaches, so das der Übersetzer kein besonderes Computer- oder gar Programmierwissen besitzen muss um den Text zu übersetzen. Eventuell kennt da ja einer von euch etwas?

    Geplant ist auf jeden Fall noch, dass man die AppleGlot Files für die Standard Texte importieren kann und das man die Texte auch ausdrucken kann.

    So, genug geschwafelt. Jetzt wünsche ich euch viel Spass mit dem StringLocalizer

    stringlocalizer.cbc-apps.com/b…d/StringLocalizer.app.zip

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Sieht schon ganz brauchbar aus.
    Ich hätte gerne eine Box in der ich Ordner abwählen kann. Bei einem meiner Projekte liegen diverse Frameworks im Projektordner. Da hab ich haufenweise Fehlermeldungen die unnötig sind.
    Einbinden vom ibtool fände ich auch praktisch.

    Manche Übersetzer verlangen Excel Files. Also mindestens ein CSV-Export mit allen Sprachen.

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Chris schrieb:

    Sieht schon ganz brauchbar aus.
    Ich hätte gerne eine Box in der ich Ordner abwählen kann. Bei einem meiner Projekte liegen diverse Frameworks im Projektordner. Da hab ich haufenweise Fehlermeldungen die unnötig sind.

    Gute Idee. Das Problem habe ich auch bei einigen Projekten. Mal schaun wie ich das einbaue.

    Einbinden vom ibtool fände ich auch praktisch.

    Öhm was genau meinst du damit?

    Manche Übersetzer verlangen Excel Files. Also mindestens ein CSV-Export mit allen Sprachen.

    Chris


    Ich werde mal meine Frau nachfragen lassen. Die hat viel mit Übersetzungsbüros zu tun.

    Danke für das Feedback

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hi Claus,

    habe mir auch mal dein Tool runtergeladen. Sieht schon echt gut aus! Vielen Dank für die Arbeit.

    Eine Sache ist mir aufgefallen. Und zwar sagt das Protokoll immer "Bad formatted String", wenn man im NSLocalizedString den comment auf 'nil' gesetzt hat. Es wäre gut, wenn dein Programm diese Strings auch erkennen würde.

    Gruß Alex
  • Das App Icon solltest Du nochmal überarbeiten. ..::Augenkrebs::..
    Ein Sheet beim Import anzuzeigen ist so eine Sache. Es blockiert die UI.
    Lass doch das Scannen als Hintergrundprozess laufen und zeige eine kleine schnuckelige Progressbar an.
    So könnte ein Benutzer noch einen neuen String anlegen, falls Du mal eine Editierfunktion planst.
  • Hi Claus,

    ich habe gleich noch ein paar Sachen:

    - die App vergisst leider in den Strings-Dateien das Semikolon am Ende einer jeden Zeile. Das ist schon ärgerlich und m.E. eine der ersten Sachen, die behoben werden sollten. Dadurch bekommt man beim Kompilieren nämlich immer einen Error. Und ich erinnere mich noch, wie ich mich wegen eines fehlenden Semikolons zu Tode gesucht habe. Jetzt weiß ich zwar, dass da eins hinkommt, aber es ist schon mühsam, nach jedem Speichern die ganzen Semikolonnen ( :-)) ) nachzutragen.

    - es wäre super, wenn die Einträge nach den Comments gruppiert werden würden. Da ich das Programm ziemlich hilfreich finde, habe ich mir die Mühe gemacht und mir bei allen Strings die Comments eingetragen. Das Programm schreibt aber über jedes Key/Value-Pair den Comment, so dass man häufig das gleiche Wort als Comment da drüber stehen hat. Wenn es nun gruppiert werden würde, dann könnte man sich als Comment z.B. Namen wie "General", etc. eintragen und hätte später alles schön sortiert.

    - du hast jeweils als Vor- und Zurück-Button die gleichen Grafiken. Da wäre einmal ein Pfeil nach links und einmal nach rechts schöner.

    - ich persönlich fände "Key" anstelle von "Base Language Text" logischer, da ja die Base Language meistens Englisch ist und man dieses dann trotzdem nochmal als Localization hat.

    So, ich hoffe, meine Vorschläge sind hilfreich. Ansonsten finde ich die App super hilfreich!

    Gruß Alex
  • Hi,

    danke euch für das Feedback. Ich seh schon ich muss mir am WE doch mal eine Stunde abknapsen und was daran machen. Das mit dem gleichen Image ist bestimmt nur ein Fehler durch Copy&Paste. Da habe ich bestimmt zwei verschiedene gemacht.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)