如何动态地将所有预定义语言添加到 ListPreference 中?

How to add all predefined languages into a ListPreference dynamically?

我有用于选择语言的 ListPreference。如图所示,当前翻译在它们自己的 strings.xml 中定义。为了填充首选项列表,我在主 strings.xml 中包含 string-array 元素,使其成为静态配置。

问题:有什么方法可以通过遍历所有 strings.xml 并在 运行 时间从中提取语言环境信息来使 Language ListPreference 动态化?

这是当前的静态设置:

values/strings/strings.xml

<resources>

<!-- Preferences -->
<string name="pref_language">Language</string>
<string-array name="pref_language_list">
    <item>English</item>
    <item>Svenska</item>
    <item>Deutsch</item>
    <item>Français</item>
    <item>Português</item>
    <item>Español</item>
    <item>Pусский</item>
</string-array>
<string-array name="pref_language_values">
    <item>en</item>
    <item>se</item>
    <item>de</item>
    <item>fr</item>
    <item>pt</item>
    <item>es</item>
    <item>ba</item>
</string-array>
</resources>

xml/pref_general.xml

  <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <ListPreference
            android:entries="@array/pref_language_list"
            android:entryValues="@array/pref_language_values"
            android:key="language"
            android:title="@string/pref_language"
            android:icon="@drawable/language"
            />
    </PreferenceScreen>

entriesentryValues 应该有效。

虽然我不明白这些无用的字符串定义和字符串赋值...

直接将它们添加到数组中;进入 values/arrays.xml;具有属性 translatable="false".

并且这些语言标签也不匹配资源文件位置。

<resources>

    <string-array name="pref_language_list" translatable="false">
        <item>English</item>
        <item>Svenska</item>
        <item>Deutsch</item>
        <item>Français</item>
        <item>Português</item>
        <item>Español</item>
        <item>Pусский</item>
    </string-array>

    <string-array name="pref_language_values" translatable="false">
        <item>en</item>
        <item>se-rSE</item>
        <item>de-rDE</item>
        <item>fr-rFR</item>
        <item>pt-rPT</item>
        <item>es-rES</item>
        <item>ba-rRU</item>
    </string-array>

</resources>