Aggiunta / rimozione delle voci di lingua nelle "Impostazioni" -> "Seleziona locale" dal telefono Android

La mia domanda:

Come posso aggiungere o rimuovere le voci di lingua nel "Impostazioni" -> "Impostazioni lingua e tastiera" -> "Seleziona locale" (o "Seleziona lingua") nel telefono Android dal livello del codice sorgente ?

Darò maggiori dettagli su ciò che voglio e cosa ho fatto. Per favore scusi se presento una comprensione o informazioni sciocchezze. Sono abbastanza nuovo per lo sviluppo di Android, cominciando ad impararlo parecchi giorni fa. C'è ancora molto che non so.

  • Android come ridimensionare (scala) un'icona del vector xml in modo programmato
  • Emulazione scheda tramite software NFC
  • Disegnando su Tela - PorterDuff.Mode.CLEAR disegna il nero! Perché?
  • Sviluppo incrementale di Android NDK
  • Gridview scaglionato (Recycleview) con carico di più funzionalità all'interno del NestedScrollView
  • L'esempio di SSO di Facebook non funziona "" Si è verificato un errore. Per favore riprova più tardi"
  • Maggiori informazioni su ciò che voglio:

    Recentemente sto lavorando su un'attività per localizzare l' integer prodotto del telefono con nuove lingue (voglio dire, non sto lavorando su un'applicazione specifica, per questo devo aggiungere una nuova impostazione nelle impostazioni). Quando ho ottenuto il telefono di sviluppo, ho scoperto che sono disponibili solo più voci di lingua nella "Seleziona Locale", come "Inglese", "Francese" e "Spagna". Quindi, prima di tutto, devo aggiungere e visualizzare alcune voci di nuova lingua in questa list, come "giapponese", "cinese", "coreano".

    Ho tutto il codice sorgente della piattaforma Android e il mio codice personale, quindi penso che questa operazione possa essere fatta modificando da qualche parte il codice sorgente oi file di risorse . Purtroppo non so where siano i codici e i file.

    Il tutorial " Hello, L10N " mostra un modo per aggiungere un nuovo locale a "Custom Locale" al momento dell'esecuzione. Ma quello che voglio è aggiungere le nuove località a tempo di costruzione, quindi quando il telefono viene avviato, le nuove localizzazioni verranno visualizzate direttamente nella "Seleziona Locale" senza altre azioni.

    Cosa ho fatto:

    Ho fatto molta ricerca su internet prima di venire qui. Ecco quello che ho trovato:

    1. Sinkiru a Stackoverflow ha chiesto una domanda su ciò che sto esattamente cercando. Vedi qui . Tuttavia, nessun altro gli ha risposto. La sua risposta dice solo where interrogare l'impostazione CURRENT lingua, che non è quello che voglio. Personalmente gli ho inviato una email per questa domanda, ma non ho ricevuto la sua risposta.

    2. Ho cercato molto in Stackoverflow, con le parole chiave "android locale", "lingua android", "android new locale" e qualcosa di simile. La maggior parte delle domande in questo sito si chiede come modificare la locale di un'applicazione, come aggiungere il supporto multilingue per un'app, ecc. Non sono quello che voglio.

    3. Ho cercato molto nel gruppo Google di piattaforma Android ( http://groups.google.com/group/android-platform ). Alcune persone stanno chiedendo la mia domanda, ma dopo aver letto i messaggi non ho ancora la mia risposta .. 🙁 Ecco un elenco dei post che ho letto nel gruppo (e non ho quello che voglio da loro) :

      • " Localizzazione OS " – Parlerò più avanti.

      • " Come aggiungere nuove impostazioni internazionali e il suo carattere associato in sorgente android "

      • " Come aggiungere nuovo L0cale "

      • " Aggiunta e rimozione del linguaggio da Android Phone "

      • " Localizzazione, impegno di nuova lingua "

      • " Ulteriori lingue supportno "

      • " Localizzazione – nuovo locale – AIUTO "

    4. Tornare alla voce "(a)" elencati in precedenza. Nel thread di "localizzazione OS", Dianne Hackborn, un engineer di framework Android, ha dichiarato quanto segue:

    "L'applicazione delle impostazioni mostra solo tutte le localizzazioni disponibili nelle risorse di piattaforma. L'aggiunta di stringhe per una nuova locale dovrebbe avere automaticamente quelle visualizzate nelle impostazioni . Dite al sistema di generazione quali risorse locali includere quando si crea la build . purtroppo non posso aiutarti in quella parte, ma forse qualcun altro può ".

    Le sue parole in grassetto suggeriscono che la mia attività può essere eseguita automaticamente aggiungendo una nuova risorsa locale al codice sorgente e impostando o modificando qualcosa nel sistema di generazione. Mi chiedo se qualcuno abbia mai fatto la cosa simile prima? Domanderò una prova.

    1. Ultimo ma non less importnte, ho cercato nel sito ufficiale dello sviluppatore Android. Nell'elenco "Esegui e prova l'applicazione localizzata" del tutorial " Hello, L10N " si dice qualcosa sulle localizzazioni disponibili nell'applicazione "Impostazioni", ma in pratica parliamo di cosa fare nell'emulatore e questo non dovrebbe essere ciò che di cui ho bisogno. Voglio che sia fatto su un telefono reale.

    2. Avevo anche immerso nel codice sorgente della piattaforma Android cercando di scoprire qualcosa. Ho iniziato a $ (ANDR_SRC_ROOT) / Pacchetti / app / Settings / src /…/ LocalePicker.java. Nel metodo LocalePicker :: onCreate () ho notato questa linea di codice:

      String [] locales = getAssets (). GetLocales ();

    Il codice di questa row tenta di impostare tutti i nomi locali ottenuti in un ArrayAdapter e quindi impostare la scheda nella visualizzazione di elenco per visualizzare. Penso quindi che il metodo "getLocales ()" sia la chiave della soluzione.

    Ho poi esaminato il codice getLocales (). getLocales () è un metodo membro di AssetManager e viene dichiarato come nativo, quindi sono entrato nel $ (ANDR_SRC_ROOT) /frameworks/base/libs/utils/AssetManager.cpp che GUESS dovrebbe essere l'implementazione effettiva del java getLocales () metodo. Il C ++ AssetManager :: getLocales () infine mi port al metodo C ++ ResTable :: getConfigurations () in cui viene scansionata una variabile membro " mPackageGroups " per recuperare tutti gli elementi ResTable_config disponibili. Quindi penso che tutti i locali disponibili dovrebbero essere aggiunti a questa mPackageGroups durante il sistema avviato. Tuttavia, ho perso nel codice all'ultimo e non sono riuscito a trovare where vengono aggiunte le aree al mPackageGroups.

  • Alternative per startActivityForResult
  • Che cosa è esattamente un context in Java?
  • Android compila l'errore utilizzando buildozer
  • Errore Gradle: Imansible trovare com.android.tools.build:gradle:2.2.3
  • Come terminare each attività sulla pila tranne la prima in Android
  • Automazione per la creazione della release di Android
  • 6 Solutions collect form web for “Aggiunta / rimozione delle voci di lingua nelle "Impostazioni" -> "Seleziona locale" dal telefono Android”

    sui telefoni HTC è necessario anche modificare /system/customize/CID/default.xml … Questo è il file che usano per specificare le localizzazioni sui loro rom di riserva. Se il rom è un WWE, suppone che modifica il CID è tutto ciò che serve, ma questo non sempre è vero.

    Penso che un'applicazione normale non dovrebbe aggiungere località al telefono. Ci sono pacchetti speciali come MoreLocale 2 per questo scopo. Se si aggiunge un locale, sarebbe responsabile non solo per fornire la localizzazione per la propria applicazione ma per l'integer sistema!

    è necessario creare la cartella "valori" nella cartella "res" del pacchetto framework-res di android. Il nome di questa nuova cartella deve contenere il codice paese del tuo bisogno, vale a dire. valori -pl-rPL (la parte di rPL è richiesta) per la lingua polacca (per inglese britannico: en-rGB , ecc.), che dovrebbe essere sufficiente – se no – creare file strings.xml in quella cartella e aggiungere le risorse vuote "nodo.

    Per creare o aggiungere più lingue all'applicazione, innanzitutto è necessario definire tutti i valori di string nella string.xml nella cartella valori piuttosto che codificarli duramente nel programma. Allora devi anche avere cartelle di valore diverse per lingue diverse, ad esempio Value-for Spanish e Value-fr per francese. Questo dovrebbe fare il lavoro. Non penso che l'applicazione possa cambiare locale per impostazione predefinita.

    Penso che devi modificare il file

    PRODUCT_LOCALES

    Presente in build / target / product / languages_full.mk e aggiungere e rimuovere le stringhe assegnate a questo.

    Puoi definire la string personalizzata come zz_zz e aggiungere valori_zz_zz di cartella in ciascuna delle tue cartelle res.

    Non hanno provato questo ma questo potrebbe funzionare.

    Nota: PRODUCT_LOCALES potrebbe essere sovrascritto altrove a seconda del sistema di generazione

    Per rimuovere le lingue, se rimuoviamo la string locale da PRODUCT_LOCALES, functionrà.

    Sto anche cercando un modo per aggiungere nuove lingue, ma solo aggiungendo a questo non aiuta. Penso che abbiamo bisogno di aggiornare alcuni file o librerie a basso livello per aggiungere nuove lingue.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.