Warum werden Zeichenfolgenressourcen im Allgemeinen außerhalb des Codes und nicht innerhalb des Codes gespeichert?

18

Im Allgemeinen schreibe ich auf vielen Plattformen meine Zeichenfolgenressourcen in eine RESX- oder XML-Datei und erhalte sie dann mithilfe eines plattformabhängigen Ansatzes.

Das heißt, unter iOS erhalte ich sie über NSBundle.MainBundleund unter Context.ResourcesAndroid.

Was sind die Vorteile dieses Ansatzes und warum ist er nicht direkt im Code verfügbar? Zum Beispiel:

  1. In einem plattformübergreifenden Projekt kann jede Plattform ohne Integration direkt darauf zugreifen.

  2. Während des Aufbaus gibt es keine Bedenken, ob die Ressourcen gut aufgebaut sind oder nicht.

  3. Der Codierer kann Funktionen wie das Handling in mehreren Sprachen verwenden

Lange Rede kurzer Sinn: Aus welchem ​​Grund sind String-Ressourcen so strukturiert?

[Bearbeiten]

Angenommen, meine Datei ist Teil eines "Kernprojekts", das von anderen Projekten gemeinsam genutzt wird. (Denken Sie an eine plattformübergreifende PCL-Projektdateistruktur.)

Angenommen, meine Datei ähnelt einer .resx / .xml-Datei und sieht so aus (ich bin kein Profi in XML, sorry!): Parameters Paramètres

Dies ist also im Grunde eine benutzerdefinierte XML, bei der Sie auf den Schlüssel / die Sprache zeigen, um die richtige Zeichenfolge zu erhalten.

Die Datei ist Teil der Anwendung, genauso wie Sie eine barrierefreie Datei in einer App hinzufügen und das System, um auf die mit PCL codierten Zeichenfolgenressourcen zuzugreifen. Würde dies einen zusätzlichen Aufwand für die Anwendungen bedeuten?

Léon Pelletier
quelle
6
Nein, meine Bedenken beziehen sich nicht auf Internationalisierung, sondern auf Architektur und plattformübergreifendes Arbeiten.
Léon Pelletier
1
Diese Frage kann auf jede Art von Ressource verallgemeinert werden, auch wenn die Lokalisierung / Internationalisierung nicht so einfach ist. Was sind die Vorteile, wenn Ressourcen von Code getrennt gehalten werden? Warum werden Bilder oder Audiodateien in der Quelle normalerweise nicht als binäre Zeichenfolgen codiert? (Daten-URIs existieren natürlich, sind jedoch im Allgemeinen für große Dateien unpraktisch.) Andere haben bereits einige ziemlich gute Antworten geliefert, aber ich wollte nur darauf hinweisen, dass vom Benutzer lesbare Zeichenfolgen nicht der einzige Ressourcentyp sind, der von der Externalisierung profitiert.
JAB

Antworten:

38

Lokalisierung und Internationalisierung,

Wenn Sie die Zeichenfolgen extern lassen, können Sie sie ändern (lesen: übersetzt), ohne sie neu kompilieren zu müssen (höchstens ein erneuter Link und bestenfalls das Ablegen in einem neuen Ordner).

Ratschenfreak
quelle
Dieser Relink vs. Recompile ist ein guter Grund, danke.
Léon Pelletier
2
Immer noch die einzige Person, die die Frage verstanden hat.
Léon Pelletier
3
@ratchetfreak es ist eine schlechte Form, zu früh zu akzeptieren (innerhalb von Stunden zählt definitiv.) Gibt keine Zeit für andere Antworten, um in die Luft zu sprudeln. Dies ist einfach und auf den Punkt und genau ... aber jemand könnte morgen (oder im nächsten Monat) eine vollständigere und detailliertere Antwort einbringen.
WernerCD
3
Extra: Es mag für einen Übersetzer in Ordnung sein, eine XML-Datei zu bearbeiten, aber lassen Sie sie niemals in der Nähe des tatsächlichen Codes herumlungern ...
herumfummeln Darkhogg
Jetzt lautet die Frage: "Gilt diese Antwort noch für gedolmetschte Sprachen?". Ich frage, weil es kein erneutes Verknüpfen oder Kompilieren geben würde.
Thomas Eding
10

Wenn Sie eine Datei haben, die nur die Zeichenkettenressourcen enthält, können Sie die Ressourcendatei einer Übersetzungsagentur oder ähnlichem geben und eine Übersetzung erhalten. Ich denke, Sie können sich vorstellen, wie schwer das werden könnte, wenn Sie einem Laien eine Menge Codefiles geben müssten, um eine Übersetzung zu machen (zusätzlich dazu, dass Sie Ihren Code möglicherweise nicht an jemanden weitergeben möchten).

Flo
quelle
2
Es gibt keinen Unterschied zwischen einer im Projekt enthaltenen Datei und einer Ressourcendatei. Das Problem ist nicht da.
Léon Pelletier
Ich spreche davon, die Ressourcen direkt in den Code aufzunehmen und dann alles innerhalb des Programms zu handhaben, damit es PCL- / plattformübergreifender ist.
Léon Pelletier
2
Wenn Sie eine "Code" -Datei mit all Ihren String-Ressourcen (Wörterbuchdefinition oder so ähnlich) haben und nichts anderes darin. Nun, es ist im Grunde eine Ressourcendatei (aber eine für eine einzelne Plattform, wie z. B. Android, nicht) nimm einen beliebigen Objective-C-Code). Wenn es einen anderen Code gibt oder wenn er auf mehrere Dateien aufgeteilt ist, ist es schwieriger, eine externe Übersetzung zu erhalten. In einer plattformübergreifenden Ansicht hat ein Textformat wie xml den Vorteil, dass Sie es in jeder Sprache / Plattform lesen und verwenden können (aber Sie müssen es möglicherweise bearbeiten)
Flo
7

Neben der Internationalisierung / Lokalisierung kann ein Korrektor auch Korrekturen an Rechtschreibung / Grammatik / Interpunktion vornehmen messages.${LOCALE}, ohne eine echte Quellcodedatei anfassen zu müssen. Möglicherweise haben Sie einen Blackout bei Codeänderungen, akzeptieren jedoch solche Textkorrekturen. Wenn Sie gleichzeitig Änderungen an Code und Nachrichten akzeptieren, können Sie die Patches einfacher zusammenführen, wenn Sie sie getrennt halten, vorausgesetzt, die Codeänderungen definieren keine Nachrichten neu, die beim Auschecken des Korrekturlesers vorhanden waren messages.en_US.

Abhängig von der Implementierung ist es möglicherweise nicht einmal erforderlich, die Anwendung erneut zu verknüpfen. Der Code kann einfach die Zeile 138 messages.${LOCALE}für eine bestimmte Nachricht abrufen, wobei die Zeilennummer zur Laufzeit bestimmt wird.

Monty Harder
quelle
0

Auf diese Weise hat sich Ihre Sprache / Plattform entschieden, die Lokalisierung von Zeichenfolgen zu implementieren.Alle Lokalisierungsansätze benötigen externe Ressourcendateien, von denen die Übersetzungen stammen. Der Hauptschmerzpunkt ist, wie Sie diese Ressourcen pflegen.

Sieht so aus, als müssten Sie diese Ressourcendateien manuell verwalten , was eine ziemliche Belastung sein kann. Dies erschwert auch das Teilen wiederholter Zeichenfolgen. Und dies zu tun, wenn Sie derzeit nur eine Sprache versenden, ist noch mehr eine Belastung.

Eine gebräuchliche Alternative ist der GNU Gettext- Ansatz, einfach die übersetzbaren Zeichenfolgen im Quellcode zu markieren und diese Zeichenfolgen automatisch in Standard-PO-Dateien zu extrahieren, die plattform- und sprachenübergreifend funktionieren. Aus Entwicklersicht schlägt es die manuelle Pflege von XML-Ressourcendateien jeden Tag.

Rene Saarsoo
quelle