Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Великий и могучий...
Список форумов
 ->  Локализация (l10n & i18n)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  

Готовы ли Вы принять участие в русификации jdk?
Да
38%
 38%  [14]
Нет
30%
 30%  [11]
Оно мне не надо
30%
 30%  [11]
Всего голосов : 36

Автор Сообщение
aleksandy : 1077
Завсегдатай

СообщениеИюн 11, 2008 8:33 
Ответить с цитатой
В общем, кому, как и мне, надоело использовать JOptionPane.showOptionDialog() с кучей параметров предлагаю следующий код, который, по крайней мере в нужном мне объеме, все-таки изменил все надписи на кнопках, диалогах, ифреймах...

Вот 3 класа, перед компиляцией желательно пропустить через native2ascii. JAR-файл положить в CLASSPATH, установить в программе отечественную локаль и наслаждаться... Smile

На авторство не претендую часть перевода взял из properties-файлов Сергея Астахова для русификации для jdk1.4. Оригинальные файлы для супостатской локали получил jad-ом (а как по-другому и быстро? Smile).
Код:

package com.sun.swing.internal.plaf.basic.resources;

import java.util.ListResourceBundle;

public final class basic_ru extends ListResourceBundle {

   public basic_ru() {
   }

   @Override
   protected final Object[][] getContents() {
      return (new Object[][] {
            new Object[] { "AbstractButton.clickText", "клик" },
            new Object[] { "AbstractDocument.additionText", "добавление" },
            new Object[] { "AbstractDocument.deletionText", "удаление" },
            new Object[] { "AbstractDocument.redoText", "Повторить" },
            new Object[] { "AbstractDocument.styleChangeText",
                  "смену стиля" },
            new Object[] { "AbstractDocument.undoText", "Отменить" },
            new Object[] { "AbstractUndoableEdit.redoText", "Повторить" },
            new Object[] { "AbstractUndoableEdit.undoText", "Отменить" },
            new Object[] { "ColorChooser.cancelText", "Отмена" },
            new Object[] { "ColorChooser.hsbBlueText", "B" },
            new Object[] { "ColorChooser.hsbBrightnessText", "Яркость" },
            new Object[] { "ColorChooser.hsbDisplayedMnemonicIndex", "0" },
            new Object[] { "ColorChooser.hsbGreenText", "G" },
            new Object[] { "ColorChooser.hsbHueText", "Оттенок" },
            new Object[] { "ColorChooser.hsbMnemonic", "72" },
            new Object[] { "ColorChooser.hsbNameText", "HSB" },
            new Object[] { "ColorChooser.hsbRedText", "R" },
            new Object[] { "ColorChooser.hsbSaturationText", "Насыщенность" },
            new Object[] { "ColorChooser.okText", "OK" },
            new Object[] { "ColorChooser.previewText", "Просмотр" },
            new Object[] { "ColorChooser.resetMnemonic", "82" },
            new Object[] { "ColorChooser.resetText", "Сброс" },
            new Object[] { "ColorChooser.rgbBlueMnemonic", "66" },
            new Object[] { "ColorChooser.rgbBlueText", "Синий" },
            new Object[] { "ColorChooser.rgbDisplayedMnemonicIndex", "1" },
            new Object[] { "ColorChooser.rgbGreenMnemonic", "78" },
            new Object[] { "ColorChooser.rgbGreenText", "Зеленый" },
            new Object[] { "ColorChooser.rgbMnemonic", "71" },
            new Object[] { "ColorChooser.rgbNameText", "RGB" },
            new Object[] { "ColorChooser.rgbRedMnemonic", "68" },
            new Object[] { "ColorChooser.rgbRedText", "Красный" },
            new Object[] { "ColorChooser.sampleText",
                  "Пример текста  Пример текста" },
            new Object[] { "ColorChooser.swatchesDisplayedMnemonicIndex",
                  "0" },
            new Object[] { "ColorChooser.swatchesMnemonic", "83" },
            new Object[] { "ColorChooser.swatchesNameText", "Палитра" },
            new Object[] { "ColorChooser.swatchesRecentText", "Последние:" },
            new Object[] { "ComboBox.togglePopupText", "Раскрыть список" },
            new Object[] { "FileChooser.acceptAllFileFilterText",
                  "Все файлы" },
            new Object[] { "FileChooser.cancelButtonMnemonic", "67" },
            new Object[] { "FileChooser.cancelButtonText", "Отмена" },
            new Object[] { "FileChooser.cancelButtonToolTipText",
                  "Закрыть диалог" },
            new Object[] { "FileChooser.directoryDescriptionText", "Папка" },
            new Object[] { "FileChooser.directoryOpenButtonMnemonic", "79" },
            new Object[] { "FileChooser.directoryOpenButtonText", "Открыть" },
            new Object[] { "FileChooser.directoryOpenButtonToolTipText",
                  "Открыть выбранную директорию" },
            new Object[] { "FileChooser.fileDescriptionText", "Все файлы" },
            new Object[] { "FileChooser.fileSizeGigaBytes", "{0} GB" },
            new Object[] { "FileChooser.fileSizeKiloBytes", "{0} KB" },
            new Object[] { "FileChooser.fileSizeMegaBytes", "{0} MB" },
            new Object[] { "FileChooser.helpButtonMnemonic", "72" },
            new Object[] { "FileChooser.helpButtonText", "Помощь" },
            new Object[] { "FileChooser.helpButtonToolTipText",
                  "Показать справку" },
            new Object[] { "FileChooser.newFolderErrorSeparator", ": " },
            new Object[] { "FileChooser.newFolderErrorText",
                  "Ошибка при создании каталога" },
            new Object[] { "FileChooser.openButtonMnemonic", "79" },
            new Object[] { "FileChooser.openButtonText", "Открыть" },
            new Object[] { "FileChooser.openButtonToolTipText",
                  "Открыть выбранный файл" },
            new Object[] { "FileChooser.openDialogTitleText", "Открыть" },
            new Object[] { "FileChooser.other.newFolder", "Новая папка" },
            new Object[] { "FileChooser.other.newFolder.subsequent",
                  "Новая папка.{0}" },
            new Object[] { "FileChooser.saveButtonMnemonic", "83" },
            new Object[] { "FileChooser.saveButtonText", "Сохранить" },
            new Object[] { "FileChooser.saveButtonToolTipText",
                  "Сохранить выбранный файл" },
            new Object[] { "FileChooser.saveDialogTitleText", "Сохранить" },
            new Object[] { "FileChooser.updateButtonMnemonic", "85" },
            new Object[] { "FileChooser.updateButtonText", "Обновить" },
            new Object[] { "FileChooser.updateButtonToolTipText",
                  "Обновить список директорий" },
            new Object[] { "FileChooser.win32.newFolder", "Новая папка" },
            new Object[] { "FileChooser.win32.newFolder.subsequent",
                  "Новая папка ({0})" },
            new Object[] { "FormView.browseFileButtonText", "Просмотр..." },
            new Object[] { "FormView.resetButtonText", "Сброс" },
            new Object[] { "FormView.submitButtonText", "Отправить запрос" },
            new Object[] { "InternalFrame.closeButtonToolTip", "Закрыть" },
            new Object[] { "InternalFrame.iconButtonToolTip", "Свернуть" },
            new Object[] { "InternalFrame.maxButtonToolTip", "Развернуть" },
            new Object[] { "InternalFrame.restoreButtonToolTip",
                  "Восстановить" },
            new Object[] {
                  "InternalFrameTitlePane.closeButtonAccessibleName",
                  "Закрыть" },
            new Object[] { "InternalFrameTitlePane.closeButtonText",
                  "Закрыть" },
            new Object[] {
                  "InternalFrameTitlePane.iconifyButtonAccessibleName",
                  "Свернуть" },
            new Object[] {
                  "InternalFrameTitlePane.maximizeButtonAccessibleName",
                  "Развернуть" },
            new Object[] { "InternalFrameTitlePane.maximizeButtonText",
                  "Развернуть" },
            new Object[] { "InternalFrameTitlePane.minimizeButtonText",
                  "Свернуть" },
            new Object[] { "InternalFrameTitlePane.moveButtonText", "Переместить" },
            new Object[] { "InternalFrameTitlePane.restoreButtonText",
                  "Восстановить" },
            new Object[] { "InternalFrameTitlePane.sizeButtonText",
                  "Размер" },
            new Object[] { "IsindexView.prompt",
                  "Индексированный поиск.  Введите ключевые слова:" },
            new Object[] { "OptionPane.cancelButtonMnemonic", "0" },
            new Object[] { "OptionPane.cancelButtonText", "Отмена" },
            new Object[] { "OptionPane.inputDialogTitle", "Ввод" },
            new Object[] { "OptionPane.messageDialogTitle", "Сообщение" },
            new Object[] { "OptionPane.noButtonMnemonic", "78" },
            new Object[] { "OptionPane.noButtonText", "Нет" },
            new Object[] { "OptionPane.okButtonMnemonic", "0" },
            new Object[] { "OptionPane.okButtonText", "OK" },
            new Object[] { "OptionPane.titleText", "Выберите значение" },
            new Object[] { "OptionPane.yesButtonMnemonic", "89" },
            new Object[] { "OptionPane.yesButtonText", "Да" },
            new Object[] {
                  "PrintingDialog.abortButtonDisplayedMnemonicIndex", "0" },
            new Object[] { "PrintingDialog.abortButtonMnemonic", "65" },
            new Object[] { "PrintingDialog.abortButtonText", "Прервать" },
            new Object[] { "PrintingDialog.abortButtonToolTipText",
                  "Прервать печать" },
            new Object[] { "PrintingDialog.contentAbortingText",
                  "Прерывание печати..." },
            new Object[] { "PrintingDialog.contentInitialText",
                  "Идет печать..." },
            new Object[] { "PrintingDialog.contentProgressText",
                  "Печатается страница {0}..." },
            new Object[] { "PrintingDialog.titleAbortingText",
                  "Печать (прерывание)" },
            new Object[] { "PrintingDialog.titleProgressText", "Печать" },
            new Object[] { "ProgressMonitor.progressText", "Процесс..." },
            new Object[] { "SplitPane.leftButtonText", "левая кнопка" },
            new Object[] { "SplitPane.rightButtonText", "правая кнопка" } });
   }
}

Код:

package com.sun.swing.internal.plaf.metal.resources;

import java.util.ListResourceBundle;

public final class metal_ru extends ListResourceBundle
{

    public metal_ru()
    {
    }

    protected final Object[][] getContents()
    {
        return (new Object[][] {
            new Object[] {
                "FileChooser.detailsViewActionLabelText", "Таблица"
            }, new Object[] {
                "FileChooser.detailsViewButtonAccessibleName", "Таблица"
            }, new Object[] {
                "FileChooser.detailsViewButtonToolTipText", "Таблица"
            }, new Object[] {
                "FileChooser.fileAttrHeaderText", "Атрибуты"
            }, new Object[] {
                "FileChooser.fileDateHeaderText", "Modified"
            }, new Object[] {
                "FileChooser.fileNameHeaderText", "Имя"
            }, new Object[] {
                "FileChooser.fileNameLabelText", "Имя файла:"
            }, new Object[] {
                "FileChooser.fileSizeHeaderText", "Размер"
            }, new Object[] {
                "FileChooser.fileTypeHeaderText", "Тип"
            }, new Object[] {
                "FileChooser.filesOfTypeLabelText", "Тип файлов:"
            }, new Object[] {
                "FileChooser.homeFolderAccessibleName", "Домой"
            }, new Object[] {
                "FileChooser.homeFolderToolTipText", "Домой"
            }, new Object[] {
                "FileChooser.listViewActionLabelText", "Список"
            }, new Object[] {
                "FileChooser.listViewButtonAccessibleName", "Список"
            }, new Object[] {
                "FileChooser.listViewButtonToolTipText", "Список"
            }, new Object[] {
                "FileChooser.lookInLabelText", "Просмотр:"
            }, new Object[] {
                "FileChooser.newFolderAccessibleName", "Новая папка"
            }, new Object[] {
                "FileChooser.newFolderActionLabelText", "Новая папка"
            }, new Object[] {
                "FileChooser.newFolderToolTipText", "Создать новую папку"
            }, new Object[] {
                "FileChooser.refreshActionLabelText", "Обновить"
            }, new Object[] {
                "FileChooser.saveInLabelText", "Сохранить в:"
            }, new Object[] {
                "FileChooser.upFolderAccessibleName", "Вверх"
            }, new Object[] {
                "FileChooser.upFolderToolTipText", "На один уровень вверх"
            }, new Object[] {
                "FileChooser.viewMenuLabelText", "Просмотр"
            }, new Object[] {
                "MetalTitlePane.closeMnemonic", "67"
            }, new Object[] {
                "MetalTitlePane.closeTitle", "Закрыть"
            }, new Object[] {
                "MetalTitlePane.iconifyMnemonic", "69"
            }, new Object[] {
                "MetalTitlePane.iconifyTitle", "Свернуть"
            }, new Object[] {
                "MetalTitlePane.maximizeMnemonic", "88"
            }, new Object[] {
                "MetalTitlePane.maximizeTitle", "Развернуть"
            }, new Object[] {
                "MetalTitlePane.restoreMnemonic", "82"
            }, new Object[] {
                "MetalTitlePane.restoreTitle", "Восстановить"
            }
        });
    }
}

Код:

package com.sun.swing.internal.plaf.synth.resources;

import java.util.ListResourceBundle;

public final class synth_ru extends ListResourceBundle
{

    public synth_ru()
    {
    }

    protected final Object[][] getContents()
    {
        return (new Object[][] {
            new Object[] {
                "FileChooser.detailsViewActionLabelText", "Таблица"
            }, new Object[] {
                "FileChooser.detailsViewButtonAccessibleName", "Таблица"
            }, new Object[] {
                "FileChooser.detailsViewButtonToolTipText", "Таблица"
            }, new Object[] {
                "FileChooser.fileAttrHeaderText", "Атрибуты"
            }, new Object[] {
                "FileChooser.fileDateHeaderText", "Изменен"
            }, new Object[] {
                "FileChooser.fileNameHeaderText", "Имя"
            }, new Object[] {
                "FileChooser.fileNameLabelText", "Имя файла:"
            }, new Object[] {
                "FileChooser.fileSizeHeaderText", "Размер"
            }, new Object[] {
                "FileChooser.fileTypeHeaderText", "Тип"
            }, new Object[] {
                "FileChooser.filesOfTypeLabelText", "Тип файлов:"
            }, new Object[] {
                "FileChooser.homeFolderAccessibleName", "Домой"
            }, new Object[] {
                "FileChooser.homeFolderToolTipText", "Домой"
            }, new Object[] {
                "FileChooser.listViewActionLabelText", "Список"
            }, new Object[] {
                "FileChooser.listViewButtonAccessibleName", "Список"
            }, new Object[] {
                "FileChooser.listViewButtonToolTipText", "Список"
            }, new Object[] {
                "FileChooser.lookInLabelText", "Просмотр:"
            }, new Object[] {
                "FileChooser.newFolderAccessibleName", "Новая папка"
            }, new Object[] {
                "FileChooser.newFolderActionLabelText", "Новая папка"
            }, new Object[] {
                "FileChooser.newFolderToolTipText", "Создать новую папку"
            }, new Object[] {
                "FileChooser.refreshActionLabelText", "Обновить"
            }, new Object[] {
                "FileChooser.saveInLabelText", "Сохранить в:"
            }, new Object[] {
                "FileChooser.upFolderAccessibleName", "Вверх"
            }, new Object[] {
                "FileChooser.upFolderToolTipText", "Вверх на один уровень"
            }, new Object[] {
                "FileChooser.viewMenuLabelText", "Просмотр"
            }
        });
    }
}


Все мнемоники остались с англиской локали
На очереди у меня еще парочка файлов из rt.jar. Вот уйду в отпуск и займусь ими...
К началу Посмотреть профиль Отправить личное сообщение
Староверъ : 7629
Ктапубеп
Откуда: Elfland

СообщениеИюн 11, 2008 9:22 
Ответить с цитатой
Может все фреймворки, все технологии, всю литературу тогда уже переведешь. Давай, давай - взялся за гуж, не говори, что не дюж. Wink
_________________
JTalks Open Source Project, JT Webinars, JT Interview
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
gesser : 3589
JavaTalks Team Member

СообщениеИюн 11, 2008 10:42 
Ответить с цитатой
А вы уверены что это еще не сделано Саном? В поставке иде куча i18n файлов. Вы исследовали этот вопрос?
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
aleksandy : 1077
Завсегдатай

СообщениеИюн 11, 2008 11:03 
Ответить с цитатой
gesser писал(а):
А вы уверены что это еще не сделано Саном? В поставке иде куча i18n файлов. Вы исследовали этот вопрос?

Саном это сделано на треть, если вообще считать сделанным: для русской локали есть классы, только для всевозможных форматтеров, для календаря и т.п. Т.е. то, что касается непосредственно ГИП-а(надписи на кнопках, в диалогах и т.д.) не переведено.

Тут можно посмотреть все, что касается сделанного Саном.

Старовъръ писал(а):
Может все фреймворки, все технологии, всю литературу тогда уже переведешь. Давай, давай - взялся за гуж, не говори, что не дюж.


Не надо утрировать... Тема локализации поднимается периодически, а толку от этого мало. Я не нашел в сети ни одного рабочего способа сделать надписи на кнопках JOptionPane на русском языке, не используя showOptionDialog с кучей различных параметров... Кстати, файлы локализации для других языков даже не включены в архив jdk-src, скачанный с сайта. Поэтому пришлось использовать декомпилятор...
К началу Посмотреть профиль Отправить личное сообщение
gesser : 3589
JavaTalks Team Member

СообщениеИюн 11, 2008 12:10 
Ответить с цитатой
Да! похоже что для Swing`а русской локализации нет Sad
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
finalizer : 1794
Завсегдатай

СообщениеСен 22, 2008 17:41 
Ответить с цитатой
Интересно, существуют ли какие-то стандарты для локализаци? Ведь один и тот же термин довольно часто можно перевести множеством способов. Есть ли у Sun официальный англо-русский словарь терминов?
К началу Посмотреть профиль Отправить личное сообщение
Sergey Astakhov : 54
Новичок

СообщениеДек 13, 2008 15:23 
Ответить с цитатой
aleksandy писал(а):
Кстати, файлы локализации для других языков даже не включены в архив jdk-src, скачанный с сайта. Поэтому пришлось использовать декомпилятор...


Надо было полные исходники качать - там всё есть.

Для последних версий 6-ки перестали выкладывать исходники, но для предыдущих найти ещё можно. Или сразу заняться 7-кой.

Я пытался занятся в прошлом году переводом текстов для 6-ки, но, увы, не сложилось. Для качественной русификации всего JRE там нужно много усилий потратить - ведь только JavaWebStart содержит более 1000 сообщений, требующий перевода. Другое объёмное место - сообщения об ошибках xalan. Найти все места можно сделав глобальный поиск по маске *_de.* (ресурсы для немецкого). Кроме того, просто перевести файл ресурсов недостаточно - как правило, нужно ещё смотреть в каком контексте это сообщение используется, от этого зависит как правильно переводить то или иное слово, и нужно ли его переводить вообще.

Да, и ещё было бы неплохо доработать вывод на консоль, иначе установка пакета русификации приведёт к тому, что под виндами ошибки на консоль начнут выдаваться закорючками (из-за того, что консоль по умолчанию работает в OEM-кодировке).
К началу Посмотреть профиль Отправить личное сообщение
aleksandy : 1077
Завсегдатай

СообщениеДек 25, 2008 6:35 
Ответить с цитатой
Sergey Astakhov писал(а):
Или сразу заняться 7-кой.

Наверное, так и надо поступить, тем более, что ее релиз состоится в начале 2010 г., и время еще есть.

Sergey Astakhov писал(а):
Для качественной русификации всего JRE там нужно много усилий потратить - ведь только JavaWebStart содержит более 1000 сообщений, требующий перевода. Другое объёмное место - сообщения об ошибках xalan.

Да, работы много, но ведь, как говорится, потмки будут нам благодарны Smile.

И потом, ведь можно начать с малого. Сначала то, что сразу бросается в глаза (сообщения, файл-чузеры, в общем, гуй). Потом уже перейти на сообщения об ошибках.
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Локализация (l10n & i18n)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru