Как обработать несколько языков в Java?

Ответы выше дают ясные повторные заявления того, что говорит документация; проблемой, с которой сталкиваются самые новые люди, являются недокументированные случаи. Например:

  • Автовыпуск : в документах говорится, что это инициирует выпуск "в какой-то момент в будущем". КОГДА?! В основном можно рассчитывать на объект, являющийся вокруг, пока Вы не выходите из своего кода назад в цикл системного события. Система МОЖЕТ выпустить объект любое время после цикла текущего события. (Я думаю, что Matt сказал это, ранее.)

  • Статические строки : NSString *foo = @"bar"; - необходимо ли сохранить или выпустить ли это? Нет. Как насчет [1 118]

    -(void)getBar {
        return @"bar";
    }
    

    ...

    NSString *foo = [self getBar]; // still no need to retain or release
    
  • Правило Создания: при создании его Вы владеете им и, как ожидают, выпустите его.

В целом, способ, которым испорчены новые программисты Cocoa, не понимая, какие стандартные программы возвращают объект с retainCount > 0.

Вот отрывок от Очень Простые Правила Для управления памятью В Какао :

правила количества Хранения

  • В данном блоке, использовании - копия, - который сохраняет выделение и - должна равняться использованию - выпуск и-autorelease.
  • Объекты, созданные с помощью конструкторов удобства (например, stringWithString NSString), считают автовыпущенными.
  • Реализация-dealloc метод для выпуска instancevariables Вы владеете

, 1-й маркер говорит: если Вы звонили alloc (или new fooCopy), Вам нужно к разъединению вызова на том объекте.

2-й маркер говорит: если Вы используете конструктора удобства , и Вам нужен объект бродить вокруг (как с изображением, которое будет оттянуто позже), необходимо сохранить (и затем более поздний выпуск) его.

3-е должно быть очевидным.

5
задан Alan Moore 27 August 2009 в 05:30
поделиться

3 ответа

Для нескольких языков обратите внимание на класс ResourceBundle .

О \ u4345 , это один из темных и очень раздражающие устаревшие уголки Java. Файлы свойств должны быть в кодировке ASCII, поэтому все символы, не относящиеся к ASCII, должны быть закодированы как \ uxxxx (их значение в Юникоде). Вы можете преобразовать файл для использования этой кодировки с помощью инструмента командной строки native2ascii . Если вы используете IDE или инструмент сборки, должна быть возможность автоматически вызывать это.

Если файл свойств - это то, что вы полностью контролируете, вы можете, начиная с Java6, также использовать UTF-8 (или любой другой другой набор символов) непосредственно в файле свойств, а указать эту кодировку при загрузке:

// new in Java6
props.load(new InputStreamReader(new FileInputStream(file), 'UTF-8'));

Опять же, это работает, только если вы загружаете Свойства самостоятельно, а не если это делает кто-то другой, например ResourceBundle (используется для интернационализации).

14
ответ дан 18 December 2019 в 07:55
поделиться

есть полный учебник по http://java.sun.com/docs/books/tutorial/i18n/index.html

Здесь уточняется и объясняется все, что вы нужно знать.

5
ответ дан 18 December 2019 в 07:55
поделиться

Учебник Java по i18n уже упоминался Питером. Если вы создаете JSP, вы, вероятно, захотите посмотреть JSTL , который в основном позволяет вам использовать функциональность ResourceBundle через теги JSP.

1
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: