2011-01-10 3 views
6

Voglio scrivere "araba" nel resource bundle messaggio (proprietà) di file, ma quando provo a salvare ottengo questo errore:Java: come scrivere "arabo" nel file delle proprietà?

"Salva impossibile completare Alcuni caratteri non possono essere mappati usando" ISO -85591-1 "codifica dei caratteri. Modifica la codifica o rimuovi il carattere ..."

Qualcuno può guidare per favore?

voglio scrivere:

global.username = اسم المستخدم

Come dovrei scrivere in arabo di "username" in file di proprietà? Quindi, che l'internazionalizzazione funziona ..

BR SC

risposta

5

Come descritto nel riferimento classe per "Proprietà"

The load(Reader)/store(Writer, String) methods load and store properties from and to a character based stream in a simple line-oriented format specified below. The load(InputStream)/store(OutputStream, String) methods work the same way as the load(Reader)/store(Writer, String) pair, except the input/output stream is encoded in ISO 8859-1 character encoding. Characters that cannot be directly represented in this encoding can be written using Unicode escapes ; only a single 'u' character is allowed in an escape sequence. The native2ascii tool can be used to convert property files to and from other character encodings.

0

Se si utilizza Eclipse, è possibile scegliere "Finestra -> Preferenze "e quindi filtrare su" tipi di contenuto ". Quindi dovresti essere in grado di impostare la codifica predefinita. C'è una schermata che mostra questo nella parte superiore di this post.

+0

E come può aiutare esattamente? – jarnbjo

+1

Ecco come ho impostato la codifica per il file delle proprietà quando ho riscontrato lo stesso messaggio di errore mentre provavo a fare qualcosa di simile. – smcmahon

4

Proprietà-based risorsa fasci devono essere codificati in ISO-8859-1 di utilizzare il meccanismo di default di caricamento, ma ho usato con successo questo codice per consentire i file di proprietà per essere codificato in UTF-8:

private static class ResourceControl extends ResourceBundle.Control { 
    @Override 
    public ResourceBundle newBundle(String baseName, Locale locale, 
      String format, ClassLoader loader, boolean reload) 
      throws IllegalAccessException, InstantiationException, 
      IOException { 
     String bundlename = toBundleName(baseName, locale); 
     String resName = toResourceName(bundlename, "properties"); 
     InputStream stream = loader.getResourceAsStream(resName); 
     return new PropertyResourceBundle(new InputStreamReader(stream, 
       "UTF-8")); 
    } 

} 

Poi, naturalmente, è necessario cambiare la codifica del file stesso in UTF-8 nel vostro IDE, e può essere utilizzato in questo modo:

ResourceBundle bundle = ResourceBundle.getBundle(
    "package.Bundle", new ResourceControl()); 
+0

Grazie, ma sto parlando di un editor che può salvare il testo scritto in arabo. – SmoothCriminel

+0

@SmoothCriminel: e ti sto dicendo che l'editor non è il problema principale: qualsiasi editor di testo decente ti permetterà di scegliere la codifica (come ti dice il messaggio di errore). Ma questo non ti aiuterà un po 'quando la classe MessageBundle insiste a interpretare il file come ISO-8859-1 –

+0

OK grazie. L'ho capito ora !!! – SmoothCriminel

0

questo è principalmente un problema di configurazione dell'editor. Se lavori in Windows, puoi modificare il testo in un editor che supporti UTF-8. L'editor integrato di Notepad o Eclipse dovrebbe essere più che sufficiente, a condizione che tu abbia salvato il file come UTF-8. In Linux, ho usato gedit ed emacs con successo. Nel Blocco note, puoi farlo facendo clic sul pulsante "Salva con nome" e scegliendo la codifica "UTF-8". Altri editor dovrebbero avere caratteristiche simili. Alcuni editor potrebbero richiedere la modifica del font per visualizzare correttamente le lettere, ma sembra che tu non abbia questo problema.

Detto questo, ci sono altri passaggi da considerare quando si esegue i18n per l'arabo. Di seguito sono riportati alcuni link utili. Assicurati di usare native2ascii sul file delle proprietà prima di usarlo altrimenti potrebbe non funzionare. Ho passato un sacco di tempo fino a quando ho capito questo fuori.

Tomcat webapps

Using nativ2ascii with properties files

1

new String(ret.getBytes("ISO-8859-1"), "UTF-8"); ha lavorato per me. file di proprietà salvato in ISO-8859-1 Encodiing.