Gostaria de mostrar o idioma atual que a interface do usuário do dispositivo está usando. Qual código eu usaria?
Eu quero isso como um NSString
formato totalmente explicitado. (Não é "en_US")
EDIT: Para aqueles que seguem adiante, há muitos comentários úteis aqui, pois a resposta evoluiu com os novos lançamentos do iOS.
ios
objective-c
cocoa-touch
nslocale
Moshe
fonte
fonte
NSLocale
. Veja minha resposta.[NSLocale preferredLanguages]
. ele é utilizado para ser separados por sublinhado (por exemploen_US
), mas agora foi mudado para um traço:en-US
NSLocale
possui métodoscomponentsFromLocaleIdentifier:
elocaleIdentifierFromComponents:
provavelmente é o caminho certo para lidar com o formato (potencialmente variável).Respostas:
As soluções fornecidas realmente retornam a região atual do dispositivo - não o idioma atualmente selecionado. Estes são frequentemente o mesmo. No entanto, se eu estiver na América do Norte e definir meu idioma para japonês, minha região ainda será o inglês (Estados Unidos). Para recuperar o idioma atualmente selecionado, você pode:
Isso retornará um código de duas letras para o idioma selecionado no momento. "en" para inglês, "es" para espanhol, "de" para alemão etc. Para mais exemplos, consulte esta entrada da Wikipedia (em particular, a coluna 639-1):
Lista de códigos ISO 639-1
Então, basta converter os dois códigos de letras na string que você deseja exibir. Portanto, se for "en", exiba "Inglês".
Espero que isso ajude alguém que está procurando diferenciar entre região e idioma atualmente selecionado.
EDITAR
Vale citar as informações do cabeçalho de NSLocale.h:
As pessoas interessadas no idioma do aplicativo dão uma olhada na resposta da @ mindvision
fonte
NSLocale preferredLanguages
alterado. Se antes você estava obtendo apenas "en", no iOS 9 você receberá "en-US" ou "en-JP" etc. Referência: happyteamlabs.com/blog/…A resposta selecionada retorna o idioma atual do dispositivo, mas não o idioma real usado no aplicativo. Se você não fornecer uma localização no seu aplicativo para o idioma preferencial do usuário, será usada a primeira localização disponível, ordenada pela ordem preferida do usuário.
Para descobrir o idioma atual selecionado nas suas localizações, use
Exemplo:
Rápido:
fonte
Solução para iOS 9:
idioma = "en-US"
languageDic terá os componentes necessários
countryCode = "US"
languageCode = "en"
fonte
Provavelmente, você terá o que deseja:
Ele mostrará o nome do idioma, no próprio idioma. Por exemplo:
fonte
As respostas aceitas e as demais respostas não levam em consideração que o idioma preferido pode ser outro idioma que não o idioma do dispositivo .
O idioma do dispositivo é o idioma no qual os elementos do sistema operacional e os aplicativos da Apple são apresentados.
O idioma preferido é o idioma em que o usuário gostaria que os aplicativos fossem localizados. A Apple fornece apenas um conjunto limitado de traduções. Se o idioma preferido for um idioma para o qual a Apple traduziu seus aplicativos, também será o idioma do dispositivo. No entanto, se o usuário preferir um idioma para o qual a Apple não fornece traduções, o dispositivo e os idiomas preferidos não corresponderão . O idioma do dispositivo não estará na primeira posição na lista de idiomas preferidos.
A função a seguir percorrerá a lista de idiomas preferidos e verificará se há uma tradução nas estruturas da Apple. O primeiro idioma a ter uma tradução é o idioma do dispositivo. A função retornará seu código de idioma.
Isso funciona se a lista de idiomas preferidos for:
A lista de idiomas preferidos pode ser editada em : Settings.app -> Geral -> Idioma e região -> Ordem do idioma preferido
Você pode usar o código do idioma do dispositivo e traduzi-lo para o nome do idioma. As linhas a seguir imprimirão o idioma do dispositivo no idioma do dispositivo. Por exemplo "Español" se o dispositivo estiver definido para espanhol.
fonte
NSBundle(forClass: UIView.self)
você está tentando fornecer o idioma mais específico para uma determinada exibição. No entanto, usando isso, deparei-me com um problema em que para uma determinada classe um idioma não era retornado. Alterei a inicialização paraNSBundle.mainBundle()
e retornou o código de idioma esperado.mainBundle()
parece ser o recomendado pela Apple como sugerido no cabeçalhoNSLocale
,// note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information
.NSBundle.mainBundle()
retorna o pacote de aplicativos, enquantoNSBundle(forClass: UIView.self)
o pacote UIKit dos sistemas. o método descrito procura por diretórios no pacote configurável. seu pacote de aplicativos conterá apenas os idiomas para os quais você pretende localizar. para determinar o idioma do dispositivo, você precisará verificar o pacote do sistema.NSLocale.preferredLanguages()
. Eu atualizei a resposta para oferecer suporte ao iOS 9 .Eu uso isso
ignorar vazamento de memória ..
e o resultado é
fonte
A tradução de códigos de idioma como en_US para inglês (Estados Unidos) é um recurso interno do
NSLocale
eNSLocale
não importa de onde você obtém os códigos de idioma. Portanto, não há realmente nenhuma razão para implementar sua própria tradução, como sugere a resposta aceita.Impressões: Alemão, Inglês, Sueco
fonte
Mesmo existe uma maneira melhor de obter o idioma atual do dispositivo. Vamos tentar pelo código abaixo -
Sugerida por Abizern em aqui
fonte
Você pode usar o
displayNameForKey:value:
método deNSLocale
:Isso será impresso:
Se você especificar o mesmo identificador de localidade para
initWithLocaleIdentifier:
e também odisplayNameForKey:value:
método, ele fornecerá o nome nativo do idioma. Descobri que, se você remover o código do país e usar justfr
een
, também omitirá o país do nome de exibição (pelo menos no Mac OS X, não tenho certeza sobre o iOS).fonte
Rápido
Para obter o idioma atual do dispositivo
Para obter o idioma do aplicativo
Nota:
Ele busca o idioma que você forneceu em CFBundleDevelopmentRegion of info.plist
se CFBundleAllowMixedLocalizations for verdadeiro em info.plist , o primeiro item de CFBundleLocalizations em info.plist será retornado
fonte
Tentei descobrir a solução certa para mim. Quando eu uso,
Locale.preferredLanguages.first
é retornado o idioma preferido nas configurações do seu aplicativo.Se você quiser conhecer o idioma nas configurações do dispositivo do usuário, use a string abaixo:
Swift 3
Para desembrulhar e usar, veja a linha abaixo:
fonte
Para obter o idioma atual do dispositivo do usuário, use o código a seguir que funcionou para mim.
fonte
iOS13, Swift 5+, WWDC2019 https://developer.apple.com/videos/play/wwdc2019/403/
Os usuários podem selecionar o idioma preferido de um aplicativo independentemente do idioma do SO.
Você pode usar estes:
fonte
Para os desenvolvedores do MonoTouch C #, use:
Nota: Sei que essa é uma pergunta do iOS, mas como sou desenvolvedor do MonoTouch, a resposta nesta página me levou na direção certa e pensei em compartilhar os resultados.
fonte
Em
Swift
:fonte
Swift 3
fonte
Função Swift 3 simples:
fonte
Se você está procurando o código de idioma preferido ("en", "de", "es" ...) e o nome de idioma preferido localizado (para o local atual), aqui está uma extensão simples no Swift:
}
fonte
fonte
Se você deseja obter apenas o idioma aqui, é minha resposta sugerida:
No meu caso, eu só queria apenas o idioma local e não a região local.
Saída: se o seu idioma local for japonês e a região local for o Japão, então:
langplusreg = ja-JP
langonly = ja
fonte
resposta @amir em Swift:
fonte
Obviamente, as soluções que dependem, por exemplo, de
geralmente funcionam bem e retornam o idioma atual do dispositivo.
Mas pode ser enganoso em alguns casos:
Se o aplicativo no qual você deseja obter esse valor já tiver alterado o idioma, por exemplo, com este tipo de código:
Nesse caso, [NSLocale preferênciaLanguages] realmente retorna o conjunto de idiomas preferido (e usado) nesse aplicativo em particular, não o idioma atual do dispositivo!
E ... nesse caso, a única maneira de obter corretamente o idioma atual atual do dispositivo (e não o definido anteriormente no aplicativo), é primeiro limpar a chave @ "appleLanguages" no NSUserDefaults, assim:
Então, [NSLocale selectedLanguages] agora retorna o valor correto.
Espero que esta ajuda.
fonte
Resposta atualizada para o Swift 4
fonte
NSLocale.preferredLanguages
deve retornar os preferidos do usuário sem respeitar o que é suportado pelo pacote.Para o Swift 3.0, o código abaixo pode ser usado para responder à sua pergunta:
fonte
No Swift 4.2 e no Xcode 10.1
fonte
De acordo com a documentação da Apple
fonte
Formato de duas letras. A Apple usa o padrão ISO ISO-3166 .
fonte
Para Swift 3:
NSLocale.preferredLanguages [0] como String
fonte
No iOS 9, se você deseja apenas o código do idioma sem o código do país, deseja esse tipo de função auxiliar - já que o idioma conterá o código do país.
fonte
SWIFT-4
fonte
NSLocale.preferredLanguages
deve retornar os preferidos do usuário sem respeitar o que é suportado pelo pacote.