Я рассматриваю возможность использования обоих для настольного приложения, которое будет отображать предпочтения в соответствии с локалью.
ОК, так что вам нужно перевести файл конфигурации в виде:
some_translated_key=some_value
Ну, если только вы не хотите поддержать MUI в какой-то момент, это не должно иметь большого значения.Однако, если вы это сделаете, чтобы разные пользователи на одном компьютере могли использовать разные языки или пользователь мог переключать язык, у вас могут возникнуть проблемы с сопоставлением ключа со свойством.При чтении ключа вам придется сканировать все переводы, и вы наверняка получите несколько записей для одного и того же ключа.Как решить это?Что ж, это хороший вопрос.
По моему опыту, файлы конфигурации должны быть независимыми от языка (нейтральная культура) и никогда не должны редактироваться вручную (то есть перевод ключей не имеет значения).
Я думал, что может быть проблема с кодировкой символов, но следующий фрагмент кода работает без проблем (файлы в кодировке UTF-8):
public class Main {
private static final String FILE_NAME = "i18ned.properties";
private File propertiesFile;
private Properties properties;
public Main() {
properties = new Properties();
propertiesFile = new File(FILE_NAME);
if (propertiesFile.exists()) {
try {
properties.load(new BufferedReader(new FileReader(
propertiesFile)));
} catch (FileNotFoundException e) {
// not likely, but should be logged either way
} catch (IOException e) {
// logger should be used instead
e.printStackTrace();
}
}
}
public void saveProperties() {
try {
properties
.store(new BufferedWriter(new FileWriter(propertiesFile)), "");
} catch (IOException e) {
// oops, use logger instead
e.printStackTrace();
}
}
public static void main(String[] args) {
Main main = new Main();
main.storeSome();
main.readSome();
}
private void readSome() {
String highAsciiKey = "żółć";
String value = properties.getProperty(highAsciiKey);
System.out.println(value);
}
private void storeSome() {
String highAsciiKey = "żółć";
String highAsciiValue = "łąkę";
properties.setProperty(highAsciiKey, highAsciiValue);
saveProperties();
}
}