String Dateien im Playstore aktivieren

Michi1304

Cadet 4th Year
Registriert
Dez. 2020
Beiträge
100
Hallo :)

ich habe gerade einen Hänger.
Ich hab innerhalb meiner App mit Android Studio, mehrere StringDateien für die Sprachen angelegt und alles übersetzt.
(Also es geht um die Sprache innerhalb der App)

Jetzt hab ich ein signiertes App Bundle im Play Store hochgeladen. Jetzt ist die Spracheinstellung, welche ich einprogrammiert habe, nicht mehr verfügbar.
Muss ich die Strings einzeln in der PlayConsole hochladen, finde hier auch nach Recherche, keine Funktion dafür.
Muss ich das in AndroidStudio aktivieren?

Wenn ich die App von Studio auf mein Handy lade, funktionieren die unterschiedlichen Sprachen.

Grüße
Michael
 
Zuletzt bearbeitet:
Meinst du die Sprache in der App, die Releasenotes, die Beschreibung, oder den Titel?
 
Da musst du nichts im Playstore machen, die Auswahl der Sprache in der App ist Sache der App.
 
Aber wie gesagt. Installier ich die APK über Android Studio funktioniert alles. Lad ich sie in Playstore hoch und installier die App über Playstore funktioniert es nicht mehr.
 
Baust du die App vielleicht irgendwie falsch? Bzw was genau funktioniert nicht?

So viel kann ich dir sicher sagen: Wir haben noch nie bei Google in-app Sprachfiles hochgeladen und die Mehrsprachigkeit funktioniert.
 
package hefe.example.hefe.ui.settings;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import hefe.example.hefe.LanguageManager;
import hefe.example.hefe.R;

public class SettingsFragment extends Fragment {

private ImageButton languageDE;
private ImageButton languageES;
private ImageButton languageHR;
private ImageButton languageFR;
private ImageButton languageIT;
private ImageButton languageJA;
private ImageButton languageNL;
private ImageButton languageRU;
private ImageButton languageTR;
private ImageButton languageUK;
private ImageButton languageEN;
private ImageButton languagePL;
private ImageButton languageSA;
private ImageButton languageCN;

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_settings, container, false);

languageDE = rootView.findViewById(R.id.languageDE);
languageES = rootView.findViewById(R.id.languageES);
languageHR = rootView.findViewById(R.id.languageHR);
languageFR = rootView.findViewById(R.id.languageFR);
languageIT = rootView.findViewById(R.id.languageIT);
languageJA = rootView.findViewById(R.id.languageJA);
languageNL = rootView.findViewById(R.id.languageNL);
languageRU = rootView.findViewById(R.id.languageRU);
languageTR = rootView.findViewById(R.id.languageTR);
languageUK = rootView.findViewById(R.id.languageUK);
languageEN = rootView.findViewById(R.id.languageEN);
languagePL = rootView.findViewById(R.id.languagePL);
languageSA = rootView.findViewById(R.id.languageSA);
languageCN = rootView.findViewById(R.id.languageCN);

LanguageManager languageManager = new LanguageManager(getActivity());

languageDE.setOnClickListener(view -> {
languageManager.updateResource("de");
restartActivity();
});
languageES.setOnClickListener(view -> {
languageManager.updateResource("es");
restartActivity();
});
languageHR.setOnClickListener(view -> {
languageManager.updateResource("hr");
restartActivity();
});
languageFR.setOnClickListener(view -> {
languageManager.updateResource("fr");
restartActivity();
});
languageIT.setOnClickListener(view -> {
languageManager.updateResource("it");
restartActivity();
});
languageJA.setOnClickListener(view -> {
languageManager.updateResource("ja");
restartActivity();
});
languageNL.setOnClickListener(view -> {
languageManager.updateResource("nl");
restartActivity();
});
languageRU.setOnClickListener(view -> {
languageManager.updateResource("ru");
restartActivity();
});
languageTR.setOnClickListener(view -> {
languageManager.updateResource("tr");
restartActivity();
});
languageUK.setOnClickListener(view -> {
languageManager.updateResource("uk");
restartActivity();
});
languageEN.setOnClickListener(view -> {
languageManager.updateResource("en");
restartActivity();
});
languagePL.setOnClickListener(view -> {
languageManager.updateResource("pl");
restartActivity();
});
languageSA.setOnClickListener(view -> {
languageManager.updateResource("ar");
restartActivity();
});
languageCN.setOnClickListener(view -> {
languageManager.updateResource("zh");
restartActivity();
});

return rootView;
}

// Helper method to restart the activity to apply language changes to all components
private void restartActivity() {
Intent intent = getActivity().getIntent();
getActivity().finish();
startActivity(intent);
}
}


Das ist mein Code Sollte auf die jeweiligen Buttons geklickt werden, wird eine String Datei als Lokale Sprache ausgewählt und die activity neu getsartet mit der neuen Sprache.
Nehme ich die App aus dem Appstore, wird die Activity zwar neu gestartet, jedoch wird nicht auf die neue Sprache umgestellt.
 
Du solltest dir mal anschauen wie App Bundles funktionieren. Das erklärt das Verhalten.
Anstatt wie in klassischen APKs alle Resource Konfigurationen zu integrieren (zB Drawables für alle Density Gruppen oder alle Sprachen), generiert der Play Store aus dem App Bundle eine Base APK, welche den Code enthält und zusätzliche APKs je Ressource für das jeweilige Gerät.
Wenn du als Systemsprache also Deutsch eingetragen hast, werden auch nur die deutschen Strings installiert. Ist ja grundsätzlich auch sinnvoll und eine Sprachauswahl in der App ist ja eher selten. Zudem gibt's ab Android 13 eine elegantere Lösung in Form von per-applanguage settings.

Das Standardverhalten kannst du wie hier beschrieben in der build config deaktivieren:
Java:
android {
  bundle {
    language {
      enableSplit = false
    }
  }
}
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Michi1304
Zurück
Oben