Ich wollte Lokalisierung in meiner App dynamisch anwenden, so ist es möglich, Strings in Java-Datei zu definieren und diese Strings in unsere Layout-XML-Datei zu holen, dh wir @ string/anystringname ersetzen dies durch die in java-Datei definierten Strings zu unserem Layout Datei @SOMESTRING definiert in Java-Datei ????Ist es möglich, string.xml-Datei zur Laufzeit in Android zu aktualisieren?
Antwort
Grundsätzlich
Sie können Ressourcendatei nicht dynamisch bearbeiten. Sie müssen diese Funktionalität selbst implementieren.
Hier ein Beispiel:
english.json
{
"hello": "Hello"
}
french.json
{
"hello": "Bonjour"
}
public class StringManager {
private static StringManager sInstance = null;
private static String sDefaultLanguageCode = "en";
private Map<String, JSONObject> mLanguageMap = new ArrayMap<>();
private StringManager() {
}
public static StringManager getInstance() {
if (sInstance == null) {
synchronized (StringManager.class) {
if (sInstance == null)
sInstance = new StringManager();
}
}
return sInstance;
}
public static void setDefaultLanguageCode(String languageCode) {
sDefaultLanguageCode = languageCode;
}
public void addLanguage(String languageCode, JSONObject json) {
mLanguageMap.put(languageCode, json);
}
public String getString(String key) {
return mLanguageMap.get(mDefaultLanguageCode).getString(key);
}
public String getString(String languageCode, String key) {
return mLanguageMap.get(languageCode).getString(key);
}
}
public class SomeActivity extends Activity {
...
public void initStringResources() {
// assume englishJsonObject is created from english.json
StringManager.getInstance().addLanguage("en", englishJsonObject);
StringManager.getInstance().addLanguage("fr", frenchJsonObject);
StringManager.setDefaultLanguageCode("fr");
}
public void useSomeString() {
String helloString = StringManager.getInstance().getString("hello");
// helloString will be "Bonjour"
// and you can get specific language string
String englishHelloString = StringManager.getInstance().getString("en", "hello");
}
// this may be called from Button or other UI component
public void onLanguageChanged(String languageCode) {
StringManager.setDefaultLanguageCode(languageCode);
// and update UI components that display localized strings
}
}
hii..tried ur Lösung, aber es funktioniert nicht .. kann ich Bewahren Sie die Datei im Asset-Ordner auf, und nachdem Sie diese Datei gelesen haben, kann diese Datei im Layout verwendet werden. – Shailee
Wie bereits erwähnt, können Sie XML-Dateien zur Laufzeit nicht ändern. Wenn Sie meine Lösung wie '
okay, habe deine Lösung ... ich muss es programmatisch tun nur eine gemeinsame Funktion für alle und Callin String erstellen – Shailee
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/tv"
/>
<string name="tv">old text</string>//old text
final TextView textView = (TextView) findViewById(R.id.rate);
textView.setText("new text");//new text
Dies ist nicht möglich. Es ist jedoch möglich, die Sprache Ihrer App zur Laufzeit zu ändern. Dadurch können Sie zwischen den strings.xml für die verschiedenen Sprachen wechseln. Eine Bibliothek, die ich dafür verwendete, ist die Android localization library Alle Ihre Aktivitäten müssen die LocalizationActivity erweitern, die die AppCompatActivity erweitert. Sie müssen nur anrufen setLanguage ("en"); Um die Sprache Ihrer Anwendung zu ändern, verwenden Sie eine andere strings.xml
In this thread können Sie weitere mögliche Lösungen lesen.
yaa Throug Werte Ordner für verschiedene Sprachen ist es möglich, alle Zeichenfolgen zu holen, aber wie man es dynamisch tut, ohne Eingabe aller verschiedenen Sprachzeichenfolgen ?? Wenn ich json für alle Zeichenketten erzeuge, die in db speichern, indem ich Schlüsselwerte durchführe und diese Zeichenkette in meiner Layout-Datei – Shailee
@Shailee verwende, funktioniert diese Lösung nur, wenn Sie die Lokalisierungen in strings.xml einschließen. Die Bibliothek ermöglicht Ihnen, Ihre Sprache zu wechseln. Die Zeichenfolgen.xml für eine andere Sprache werden jetzt verwendet. Dies ermöglicht eine dynamische Lokalisierung. Wenn Sie jedoch die lokalisierten Zeichenfolgen aus einer Datenbank abrufen möchten. Ihre beste Option besteht wahrscheinlich darin, TextView abzuleiten und ein benutzerdefiniertes Attribut hinzuzufügen. https://developer.android.com/training/custom-views/create-view.html. In Ihrer Textansicht können Sie die Logik zum Lesen der richtigen Zeichenfolge implementieren. – Rockney
ok, ist es also möglich, Sprachen dynamisch zu ändern, wenn Sie durch diese Lokalisierungsbibliothek klicken, ohne eine neue Zeichenkette für verschiedene Sprachen zu erstellen? – Shailee
- 1. Ist es möglich, Variablen zur Laufzeit zu beobachten?
- 2. Ist es möglich, eine Klassenzusammenfassung zur Laufzeit zu erhalten?
- 3. Java-Code zur Laufzeit aktualisieren
- 4. Ist es möglich, Lambda-Ausdruck zur Laufzeit abrufen
- 5. Ist es möglich, Ausgabeargumente zur Laufzeit dynamisch anzugeben
- 6. Ist es möglich, ein Unterprogramm zur Laufzeit in ein anderes Unterprogramm zu übersetzen und zu übergeben?
- 7. Ist es möglich, Code in eine Android-Anwendung zu injizieren?
- 8. Ist es in Ordnung, statische Attribute zur Laufzeit zu manipulieren?
- 9. Android: Anfrage zur Laufzeit
- 10. Ist es möglich, KVO-abhängige Schlüssel zur Laufzeit in objective-c zu registrieren?
- 11. Ist es möglich, einen Methodenkörper zur Laufzeit in .NET zu ändern?
- 12. Es ist möglich, Registerkarten in ViewPager zur Laufzeit hinzuzufügen/zu entfernen?
- 13. Ist es möglich, Metadaten in Winform einzubetten oder zur Laufzeit zu steuern?
- 14. Ist es möglich, ein Objekt wie dieses zur Laufzeit in Java zu erstellen?
- 15. Subtrahieren zur Laufzeit in Android
- 16. Ist die Anforderung zur Internet-Persmission zur Laufzeit (Android) erforderlich?
- 17. Ist es möglich, Dateizugriff mit Flash-Player-Laufzeit zu erhalten?
- 18. Ist es möglich, 2D-Animationen zur Laufzeit mit Unity zu erstellen?
- 19. ImageBrush von ResourceDictionary zur Laufzeit aktualisieren
- 20. Ist es möglich, die Anwendungskonfigurationsdatei zur Laufzeit für die .NET-Anwendung zu wechseln?
- 21. Android ClassNotFoundException Fehler zur Laufzeit
- 22. Ist das Umschalten von app.config zur Laufzeit möglich?
- 23. Ist es möglich, Dlib in Android wie OpenCV zu verwenden?
- 24. In Java, ist es möglich, die Serializable-Schnittstelle zur Klasse hinzuzufügen, die es zur Laufzeit nicht hat?
- 25. Ist es möglich, ein dynamisches Design in Chrome zu erstellen?
- 26. Ist es möglich, Ihre hochgeladene iPhone-Anwendung automatisch zu aktualisieren?
- 27. Ist es möglich, google amp HTML-Seiten zu aktualisieren?
- 28. Ist es möglich, angularjs Ausdrücke innerhalb eines iframe zu aktualisieren?
- 29. Ist es möglich, ADF-Pipeline-Eigenschaft durch Powershell zu aktualisieren
- 30. Ist es möglich, Daten mit SqlCommand zu aktualisieren/einzufügen?
'Ist es möglich, ...' ** NO **. Sie können die Ressourcendateien zur Laufzeit nicht ändern. –
Aber es muss einen Weg geben, programmatisch zu tun und die IDs zu bekommen ?? – Shailee