Eu gostaria de ter 2 idiomas para a interface do usuário e separar valores de string para eles no meu arquivo de recursos res\values\strings.xml
:
<string name="tab_Books_en">Books</string>
<string name="tab_Quotes_en">Quotes</string>
<string name="tab_Questions_en">Questions</string>
<string name="tab_Notes_en">Notes</string>
<string name="tab_Bookmarks_en">Bookmarks</string>
<string name="tab_Books_ru">Книги</string>
<string name="tab_Quotes_ru">Цитаты</string>
<string name="tab_Questions_ru">Вопросы</string>
<string name="tab_Notes_ru">Заметки</string>
<string name="tab_Bookmarks_ru">Закладки</string>
Agora, preciso recuperar esses valores dinamicamente no meu aplicativo:
spec.setContent(R.id.tabPage1);
String pack = getPackageName();
String id = "tab_Books_" + Central.lang;
int i = Central.Res.getIdentifier(id, "string", pack);
String str = Central.Res.getString(i);
Meu problema é esse i = 0
.
Por que não funciona no meu caso?
en
ouru
?Respostas:
O link ao qual você está se referindo parece funcionar com seqüências de caracteres geradas em tempo de execução. As strings de strings.xml não são criadas em tempo de execução. Você pode obtê-los via
getResources()
é um método daContext
classe Se você estiver dentro de umActivity
ou de umService
(que estenda o contexto), poderá usá-lo como neste snippet.Observe também que toda a dependência do idioma pode ser resolvida pela estrutura do Android . Simplesmente crie pastas diferentes para cada idioma. Se o inglês for o idioma padrão, basta inserir as strings em inglês
res/values/strings.xml
. Em seguida, crie uma nova pastavalues-ru
e insira as strings russas com nomes idênticosres/values-ru/strings.xml
. A partir deste ponto, o Android seleciona o correto, dependendo da localidade do dispositivo, quando você chamagetString()
ou faz referência a cadeias de caracteres em XML via@string/mystring
. Os deres/values/strings.xml
são os substitutos, se você não tiver uma pasta que cubra a localidade dos usuários, essa será usada como valores padrão.Consulte Localização e fornecimento de recursos para obter mais informações.
fonte
android.support.v4.app.Fragment
, basta ligargetString(R.string.mystring)
diretamente.Eu tenho o mesmo problema. Mas este código abaixo funciona para mim: Verifique se o seu packageName está correto. Você deve consultar o pacote raiz do seu aplicativo Android.
fonte
string
e nãostrings
. Porque isso é lógico (como o resto do Android). Então, obrigado por isso (e mais), @leonvian. :-)String someStringFromXML = getString(getResources().getIdentifier("some_string_name", "string", getPackageName()));
.Não apenas das atividades:
fonte
fonte
Eu adicionaria algo à solução do leonvian, portanto, se por acaso a string não for encontrada entre os recursos (valor de retorno 0, que não é um código de recurso válido), a função poderá retornar algo:
fonte
Melhor Abordagem
App.getRes().getString(R.string.some_id)
Funcionará em qualquer lugar (Utils, modelos também).
Eu li todas as respostas, todas as respostas podem fazer seu trabalho.
getString(R.string.some_string_id)
em ambosActivity
ouFragment
.Context.getString(R.string.some_string_id)
onde você não tem acesso direto aogetString()
método. LikeDialog
.Problema
Quando você não tem
Context
acesso , como um método em suaUtil
classe.Suponha abaixo o método sem contexto.
Agora você passará
Context
como parâmetro neste método e usarágetString().
O que eu faço é
O que? É muito simples de usar em qualquer lugar do seu aplicativo!
Então, aqui está uma solução pela qual você pode acessar recursos de qualquer lugar
Util class
.Adicione um campo de nome à sua
manifest.xml
<application
tag.Agora você está pronto para ir. Use
App.getAppResources().getString(R.string.some_id)
em qualquer lugar do aplicativo.fonte
getResourses
,getResources
isso causaria a substituição. Além disso, o padrão singleton parece desnecessário, possivelmente poderia ser ignorado. Alguma memória vaza problemas com esta solução?A maneira mais fácil é usar a
getString()
função dentro da atividade.Referência: http://developer.android.com/guide/topics/resources/string-resource.html
Eu acho que esse recurso foi adicionado em uma versão recente do Android, qualquer pessoa que conhece o histórico pode comentar sobre isso.
fonte
Uma maneira simples de obter a sequência de recursos da sequência em um TextView. Aqui resourceName é o nome do recurso
fonte
Se você não tiver uma referência de atividade, poderá usar seu contexto desta maneira:
fonte
Há também um conjunto de sequências predefinidas do Android , como "Ok", "Cancelar" e muitas outras - para que você não precise declarar tudo. Eles estão disponíveis simplesmente por:
(Nesse caso, sequência "Ok"). Aliás, também existem outros recursos do Android disponíveis, como, por exemplo, imagens de ícones etc.
fonte
String myString = getString (R.string.mystring);
jeito fácil
fonte
Você pode tentar isso em uma atividade:
Em outras situações, como fragmentos, ... use
fonte
Para segurança, você deve adicionar: mContext.getResources (). GetString (R.string.your_string);
O mContext pode ser: contexto em onAttach () do Fragment ou no Activity.
fonte
Se você não conseguir inseri-lo em uma atividade ou fragmnet, então:
Se você deseja obtê-lo de uma classe fora da atividade ou fragmento em que você não possui o contexto de atividade, use o contexto do aplicativo:
fonte
Use essa linha diretamente no seu arquivo java. Mantenha simples.
fonte