Русификация программы

 
 
 
Сообщения:14
Ситуация: Есть программный продукт для работы на ПК под виндой с полным доступом к коду. Происхождение вражеское. Назначение - пересылка ходов при игре по эл. почте. Автор приветствует русификацию продукта и предоставил информацию где взять файл, содержащий строки для перевода. Я перевел строковые значения и вернул файл в приложение. В результате все, что я заполняю в процессе работы с программой (пути к папкам, названия партий, имена игроков) пишется корректно, а все что пишет программа (метки полей для заполнения, сообщения об ошибках, Заголовки окон) как у нас говорят, пишутся кракозябрами. Своим умишком, понимающим только основы программирования, я осознаю, что дело в шрифте, используемом программой и в том, что у меня он не установлен в системе. Попытка выяснить название шрифта у автора натолкнулась толи на языковой барьер между "вражеским" разработчиком и переводчиком Яндекса (сами-то мы не местные :) ), толи на ментальные проблемы, но он начал говорить, что не использовал какой либо шрифт. Из этого я сделал заключение, что он просто не знает, какой шрифт был использован по умолчанию при создании программы на его канадском компьютере.

https://yadi.sk/i/QdZJXDv8_2ZhVg]Вот так выглядит сейчас программа с переводом на русский[/url]

Мне представляется: 1. Возможно задать использование русского шрифта сходного размера и начертания
2. Возможно узнать используемый программой шрифт для последующей установки на ПК
3. Выяснить суть проблемы и определить ее решение, если все, что я написал выше не верно

Задача: Найти (и при возможности исполнить) решение по одному из трех, вышеперечисленных, путей. Могу предоставить все запрашиваемые материалы т.к. коммерческой ценности они не представляют. У нас в стране пока четверо ею пользуются, а на западе не больше 10-20 человек. Ста человек на планете этот контингент вряд ли когда превысит.

На советы по программированию не тратьте время, пожалуйста, я сам все равно этого не сделаю.
 
 
Сообщения:363
Скорее всего Вы изменили кодировку самого файла "messages.properties" c "utf-8" на какую-то другую. Если открыть файл в notepad++, то он показывает "ANSI as UTF-8".

P/S: менять сам файл "messages.properties" не надо. Просто скопируйте его и переименуйте в "messages_ru_RU.properties", в котором уже правьте английский текст на русский. Потом добавьте новый файл в whoseturnisit.jar в тоже место, где лежит оригинальный. Если при запуске программы перевод не появится, то попробуйте запустить его из командной строки:
java -Duser.language=ru -Duser.region=RU -jar whoseturnisit.jar
 
 
Сообщения:14
Да, все вы правильно говорите. Только одно но: Программа сделана не в России. Кодировка файла UTF-8, а во всей программе 1252. По сему пишет бред. 1252 вообще никак не поддерживает кириллицу. Что можно в этом случае сделать?
 
 
Сообщения:363
Я попробовал сделать так, как написал Вам. У меня все корректно отобразилось на windows 7 english с русскими региональными настройками.
 
 
Сообщения:14
Попоробовали где? Файл в кодировке UTF-8 и сам отображается корректно, все записи. Кракозябры появляются при использовании программы
 
 
Сообщения:363
wgbn1968:
Попоробовали где? Файл в кодировке UTF-8 и сам отображается корректно, все записи. Кракозябры появляются при использовании программы

Скачал программу, из jar файла выцепил копию исходного файла messages.properties, переименовал его, сделал перевод некоторых элементов меню, запихнул новый файл в jar и запустил это дело, как написал выше.
 
 
Сообщения:176
Раньше кодировка по умолчанию для *.properties файлов было ISO-8859-1. Только с Java 9 изменили её на UTF-8.
JEP 226: UTF-8 Property Resource Bundles
 
 
Сообщения:363
axwer:
Раньше кодировка по умолчанию для *.properties файлов было ISO-8859-1. Только с Java 9 изменили её на UTF-8.
JEP 226: UTF-8 Property Resource Bundles

Вы правы, об этом не подумал. Сам использую 11 версию.
 
 
Сообщения:363
Дополнение к посту выше.

Если у автора темы есть доступ к исходникам тогда для того, чтобы в java8 нормально читался русский язык в файле messages.properties в utf-8 кодировке, можно создать вложенный класс в файле Messages.java:
private static class UTF8Control 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);
      ResourceBundle bundle = null;
      if (format.equals("java.class")) {
        try {
          @SuppressWarnings("unchecked")
          Class<? extends ResourceBundle> bundleClass
                  = (Class<? extends ResourceBundle>)loader.loadClass(bundleName);

          // If the class isn't a ResourceBundle subclass, throw a
          // ClassCastException.
          if (ResourceBundle.class.isAssignableFrom(bundleClass)) {
            bundle = bundleClass.newInstance();
          } else {
            throw new ClassCastException(bundleClass.getName()
                                                 + " cannot be cast to ResourceBundle");
          }
        } catch (ClassNotFoundException e) {
        }
      } else if (format.equals("java.properties")) {
        final String resourceName = toResourceName(bundleName, "properties");
        if (resourceName == null) {
          return bundle;
        }
        final ClassLoader classLoader = loader;
        final boolean reloadFlag = reload;
        InputStream stream = null;
        try {
          stream = AccessController.doPrivileged(
                  new PrivilegedExceptionAction<InputStream>()
                  {
                    public InputStream run() throws IOException
                    {
                      InputStream is = null;
                      if(reloadFlag)
                      {
                        URL url = classLoader.getResource(resourceName);
                        if(url != null)
                        {
                          URLConnection connection = url.openConnection();
                          if(connection != null)
                          {
                            // Disable caches to get fresh data for
                            // reloading.
                            connection.setUseCaches(false);
                            is = connection.getInputStream();
                          }
                        }
                      }
                      else
                      {
                        is = classLoader.getResourceAsStream(resourceName);
                      }
                      return is;
                    }
                  });
        } catch (PrivilegedActionException e) {
          throw (IOException) e.getException();
        }
        if (stream != null) {
          try {
            bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8"));
          } finally {
            stream.close();
          }
        }
      } else {
        throw new IllegalArgumentException("unknown format: " + format);
      }
      return bundle;
    }
  }

и изменить строку:
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("com.lesliesoftware.whoseturnisit.messages");

на:
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("com.lesliesoftware.whoseturnisit.messages", new UTF8Control());
Изменен:28 июл 2019 18:52
 
 
Сообщения:14
Огромное спасибо, за внимание! Я не знаю, что в Ваших словах означает доступ к исходникам. Файл *.jar свободно открывается. Моих знаний явно недостаточно, для понимания процесса :( Внутри whoseturnisit.jar есть файл Messages.class. Надо в нем что-то изменить?
Изменен:29 июл 2019 05:37
 
 
Сообщения:14
https://yadi.sk/d/FzZVIAp8Tc6mgg - Вот ссылка. Если Вы будете столь любезны посмотреть.
 
 
Сообщения:363
Файл с расширением .class - это откомпилированный файл. Файл с исходниками имеет расширение .java, который уже потом компилируется в .class. Для того, чтобы из class файла сделать java файл можно использовать декомпилятор (есть онлайн версии).

Если у Вас установлена java8, то проще скачать альтернативную версию джава (посвежее) и установить её, например 11 отсюда.
 
 
Сообщения:14
Возможно я не писал, я не программист. Мои познания в программировании в самом низу. От меня требуется декомпилировать в java файл и заменить строки на присланные или создать новый файл?
 
 
Сообщения:176
Если вы не программист, то действительно следующее будет сделать проще:
Quote:
Если у Вас установлена java8, то проще скачать альтернативную версию джава (посвежее) и установить её, например 11 отсюда.
 
 
Сообщения:14
Я поддерживаю контакт с автором, и он не ограничивал меня ни в чем. А как должен решиться вопрос после перезагрузки или надо куда-то вмешиваться?
Изменен:29 июл 2019 06:35
 
Модераторы:alon4iknazicaTaky_
Сейчас эту тему просматривают:Нет