Как использовать getString () для stati c? - PullRequest
0 голосов
/ 24 апреля 2020

Я использую разные текстовые файлы в папке активов (arabi c .txt, engli sh .txt), и я хочу изменить файловую базу на языке устройства

Можно ли установить файл? имя в значениях / строковый файл?

public static class TipsSource{
    // if language arabic select file arabic.txt
    // if language english select file english.txt
    public static String English="english.txt";

}

строковый файл

<string name="LangFile">"english.txt"</string>

я пробовал

    public static String English=getResources().getString(R.string.LangFile);

и

   public static String English= getString(R.string.LangFile);

и

   public static String English= R.string.LangFile;

Обновление "решено"

Я создал assets / en / file.txt assets / ar / file.txt

TxtFile = file. txt

            reader = new BufferedReader(
           new InputStreamReader(context.getAssets().open((context.getString(R.string.tips) + TxtFile))));

строковый файл

<string name="langdir">en/</string>

Ответы [ 5 ]

0 голосов
/ 24 апреля 2020

Ничто не работает с моей папкой res / raw приложения *

, поэтому мне понравилось это assets / ar / file.txt

TxtFile = file.txt

            reader = new BufferedReader(
           new InputStreamReader(context.getAssets().open((context.getString(R.string.langdir) + TxtFile))));

строковый файл

<string name="langdir">en/</string>
0 голосов
/ 24 апреля 2020

В целях локализации я бы использовал папку /res вместо /assets. Вы можете поместить эти текстовые файлы в /res/raw для вашего языка по умолчанию (арабский c) и /res/raw-en для переведенных на английский sh. (Обратите внимание, что вы должны использовать одно и то же имя файла)

/res/raw/file.txt
/res/raw-en/file.text

Таким образом, вам не нужно заботиться о переключении ресурсов между языками. Это будет Android бизнес ОС.

InputStream inputStream = resources.openRawResource(R.raw.file);
0 голосов
/ 24 апреля 2020

это не может ,, потому что stati c не может получить контекст , getResources () должен нуждаться в контексте

0 голосов
/ 24 апреля 2020
Метод

getClass() нельзя использовать в методе c. так что я сделал так.

import java.io.File;
import java.net.URL;

public class ResourceTest {
    public static String EnglishTextFile = "english.txt";
    public static String ArabicTextFile = "arabic.txt";

    public static void main(String[] args) {

        String textLanguage = "";

        // case 1 : load value from arguments of main method.
        textLanguage = args[0];

        // case 2: just wrote what you want.
        textLanguage = EnglishTextFile;

        ResourceTest resourceTest = new ResourceTest();

        resourceTest.readTextFile(textLanguage);
    }

    public File readTextFile(String fileName) throws IllegalArgumentException {
        ClassLoader classLoader = getClass().getClassLoader();

        URL resource = classLoader.getResource(fileName);
        if (resource != null) {
            return new File(resource.getFile());
        } else {
            throw new IllegalArgumentException("Not found file. File name is '" + fileName + "'");
        }
    }
}
0 голосов
/ 24 апреля 2020

Может быть, кавычки излишни.

<string name="LangFile">english.txt</string>

Вы можете попробовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...