Laden von Bildern aus dem richtigen Bundle beim Lokalisieren von Storyboards

8

Ich versuche eine Option hinzuzufügen, damit der Benutzer zwischen Arabisch & amp; Englische Sprache aus der App heraus (ohne die Sprache des ganzen iPhone neu einstellen zu müssen), habe ich es richtig gemacht, indem ich diese Methode in der AppDelegate.m Datei verwendet habe:

%Vor%

Ich habe zwei UIButtons auf einen der View-Controller in der App gesetzt, um die Methode zu testen, und es hat gut funktioniert: Alle UILabels , Strings usw. im neuen geladenen (lokalisierten) Storyboard werden mit dem richtigen angezeigt ausgewählte Sprache, aber mit eine Ausnahme : das neu geladene Storyboard nimmt seine lokalisierten Bilder nicht auf, es nimmt die Bilder für das alte Storyboard (altes Bündel), dh wenn die App derzeit auf einem englischen Bundle läuft und der Benutzer tippte auf die Schaltfläche, die die Sprache auf Arabisch umschaltet, die App wird mit den richtigen arabischen Steuerelementen und Zeichenfolgen angezeigt, aber mit englischen Bildern, zurück zu Englisch wird alles in Ordnung sein (englische Zeichenfolgen, Beschriftungen und Bilder ...)

Hier ist, wie mein Storyboard lokalisiert ist:

und hier ist, wie jedes Bild lokalisiert ist:

Wie kann ich die richtigen Bundle-Bilder laden, wenn der Benutzer die App-Sprache wechselt?

UPDATE:
Hier ist ein Link zu einem Beispielprojekt für was ich meine, führen Sie das Beispiel und Sie werden feststellen, wenn Sie die Sprache aus der App ändern, werden Sie feststellen, dass das Bild nicht veränderbar ist ... und Sie werden auch bemerken, dass das lokalisierte Storyboard nicht das richtige Bild in seinem Designeditor lädt ...

P.S. Fügen Sie keine Kommentare hinzu, warum ich ein solches Szenario zum Wechseln der Sprache verwende, da dies eine Kundenanforderung ist.

    
JAHelia 06.02.2013, 13:44
quelle

3 Antworten

2

Ich hatte dasselbe Problem :( .. und was für mich funktionierte (für solche Szenarien, um die Sprache zu wechseln) ..

Sie haben 2 Möglichkeiten ..

1) Wenn Sie das Storyboard ändern möchten (Hot Change), müssen Sie alle Outlets in jedem Storyboard ändern. Wählen Sie in Ihrem Storyboard das gewünschte Bild ( mit anderen Namen ), Beschriftungen, etc .. Für mich, mit lokalisierten Bildern (gleicher Name) - funktioniert nur nach Neustart der Anwendung. Für den gleichen img_name habe ich versucht ... das spezifische Image aus dem spezifischen lproj-Ordner (spracheBundle) zu "rufen" .. aber es hat nicht funktioniert das Storyboard von AppDelegate geändert ..

2) Sie können nur ein Storyboard haben ... und nur die Beschriftungen, das Bild usw. ändern (laut Localizable.strings), etwas lenke das ... Ссылка Außerdem müssen Sie einen anderen Dateinamen für Bilder haben (für "hot changing")

Ich weiß nicht, ob ein Bug ... oder was ist ...

UPD

Sie haben ein kleines Projekt Ссылка mit beiden ..

Wenn Sie das Storyboard ändern (wie Sie), haben Sie den gleichen Pfad für languageBundle, bis Sie die Anwendung neu starten. Also ... du musst das Ändern in deinem Storyboard richtig machen.

Für die zweite .. können Sie die Ausgänge ändern / aufrufen .. aus bestimmten SpracheBundle (lproj Ordner) ..

Für 1) .. Ich habe einen "Trick" gefunden, um das LanguageBundle bis zum Neustart zu überschreiben:

%Vor%

und initiiere die Outlets:

%Vor%     
TonyMkenu 07.02.2013 01:46
quelle
1

Sie müssen alle Ansichten neu laden, die mehrsprachigen Text enthalten, was nicht möglich ist, als ob die Ansicht Objekte im Controller referenziert hätte. Das Ergebnis ist unbekannt und wird höchstwahrscheinlich abstürzen.

Ein korrekter und effizienter Ansatz besteht darin, für jede Sprache ein Wörterbuch zu haben, das Sie basierend auf der ausgewählten Sprache wechseln können. Zeichnen Sie den gesamten statischen Text so, dass Sie ihn einfach zurückziehen können, wenn sich die Sprache ändert. Bei Sprachänderungen eine Benachrichtigung an die Controller senden, um die Ansicht neu zu zeichnen. Für Bilder können Sie ähnliche zeichnen oder Bezug nehmen, die Sie ändern können.

Eine Sache, die Sie für Bilder tun können, ist eine benutzerdefinierte Bildansichtsklasse, die auch die Sprachänderungsbenachrichtigung beobachtet und automatisch das entsprechende Bild lädt. Das Gleiche können Sie für Etiketten tun.

Ich kann etwas für Sie programmieren, wenn Sie ein Beispiel brauchen.

    
SAPLogix 14.02.2013 19:41
quelle
-1
%Vor%     
Ning 03.04.2013 20:33
quelle