Подтвердить что ты не робот

Хороший редактор файлов свойств Java

Я работаю над Java-проектом с открытым исходным кодом, и у нас есть много файлов свойств ресурса, которые содержат локализованные ресурсы сообщений. Эти файлы переводятся добровольцами на более 20 языков, и я разработчик, который в первую очередь редактирует код.

В Java файлы ресурсов для разных локалей группируются вместе по соглашению об именах. Например, если стандартным (обычно английским) ресурсом является "foo.properties", японский ресурс находится в "foo_ja.properties", французский - "foo_fr.properties" и т.д. Ради этого вопроса позвольте назвать эту группу "группа ресурсов".

Теперь, каждый так часто, мне нужно реорганизовать эти файлы ресурсов. Кроме того, мне нужен инструмент для поддержки основ файлов свойств. В общем, мой список требований - это что-то вроде:

  • Переименование имени ключа свойства, и я хочу, чтобы инструмент переименовал все ключи во всех файлах в одной и той же группе без моего индивидуального прохождения через них.
  • Переместить свойство из одной группы ресурсов в другую, и я хочу, чтобы инструмент делал это для каждого файла ресурсов в группе.
  • В Java файлы ресурсов находятся в кодировке ISO-8859-1, а не в кодировке по умолчанию платформы.
  • Я не хочу видеть \uXXXX при редактировании/просмотре файлов свойств, но я ожидаю, что инструмент сохранит их.
  • Я не хочу, чтобы инструмент изменял порядок свойств в файле ресурсов и не смешивался с комментариями. Я ожидаю, что инструмент сохранит их.
  • Я хочу, чтобы инструмент обрабатывал другие синтаксические данные файлов ресурсов, такие как многострочный текст.

К сожалению, я не нахожу хороший инструмент, который бы соответствовал этим критериям. Я в первую очередь пользователь IntelliJ IDEA, но он не делает # 2 и # 3. Встроенный редактор файлов свойств Eclipse еще хуже, и AFAICT не делает # 1, # 2, # 4. На самом деле ему не хватает представления, которое разрешает файлы ресурсов в той же группе. NetBeans также примитивен. То же самое относится и к NetBeans, хотя это № 4.

Кто-нибудь знает о хорошем инструменте, который соответствует счету?

4b9b3361

Ответ 1

На этом этапе, я думаю, ответ заключается в том, что в Java нет хорошего редактора файлов свойств, который соответствует перечисленным критериям. prbeditor прозвучал многообещающе, но он ушел, IntelliJ IDEA выглядит хорошо на бумаге, но страдает от критической ошибки, а затем плагины Eclipse все несколько примитивны.

Ответ 2

Я использовал плагин для eclipse. Я думаю, что это: http://sourceforge.net/projects/eclipse-rbe/

Все в порядке, позволяет добавлять и переименовывать свойства, отображать предупреждения, если свойство не переведено на все поддерживаемые языки и т.д.

Его недостатком является то, что он всегда использует обозначение `\ uXXXX 'для символов Unicode. Таким образом, вы должны использовать этот плагин для чтения созданных файлов. Это делает поиск очень сложным. И я не знаю, можно ли настроить его для создания пакетов с кодировкой UTF-8.

Ответ 3

Откажитесь от Multiproperties, если вы все еще ищете такой плагин: см. здесь

Отсутствует требование №6.

Ответ 4

Взгляните на онлайн-инструмент POEditor https://poeditor.com. Его проект основан.

Ответ 5

Редактор свойств (плагин Eclipse) действительно # 4. Никогда не нуждался в этом ни для чего другого.

Ответ 6

Оказывается, IntelliJ должен иметь возможность делать # 3 (за исключением того, что он не работает в текущей версии из-за ошибки.) Итак что оставляет меня всего лишь # 2.

В настоящее время (и для проблемы) я решил, что объединение Groovy script выполняется быстрее, чем тестирование этих инструментов:

#!/usr/bin/env groovy
// base name of the resource group to move a property from
File base = new File(args[0])
// key name of the property to move
String from = args[1]
// base name of the resource group to move the property to
File dst  = new File(args[2])
// name of the new property after move
String to = args[3]

/*
TODO:
  support multi-line
  insert the text in a better place, in the sort order
*/

base.parentFile.eachFileMatch(~"${base.name}(_.*)?\\.properties") { f ->
  def l = f.name.substring(base.name.length())
  println "${f}"

  def tmp = new File(f.path+".tmp")

  // delete this property from the source, and remember it
  def dropped = null;
  tmp.withWriter("iso-8859-1") { w ->
    f.filterLine(w,"iso-8859-1") { line ->
      if (line.startsWith(from)) {
        dropped = line;
        return false;
      } else {
        return true;
      }
    }
  }
  tmp.renameTo(f)

  if (dropped==null)    return; // nothing to copy to

  // append
  f = new File(dst.path+l)
  tmp = new File(f.path+".tmp")
  println "-> ${f}"

  existing = f.bytes
  needsLF = (existing[existing.length-1]!='\n')

  f.withWriterAppend("iso-8859-1") { w ->
    if (needsLF) w.write('\n')
    w.write(to+dropped.substring(from.length()))
    w.write('\n')
  }
}

Этот script является взломом и не понимает синтаксис файла свойств, поэтому он не очень надежный. Но VCS может компенсировать этот недостаток, позволив вам увидеть, что именно сделал script.

Я все еще надеюсь найти хороший инструмент, чтобы я был более продуктивным в более продолжительном режиме. Поэтому, пожалуйста, держите ответы!

Ответ 7

Я использую prbeditor в течение некоторого времени, и я думаю, что он может справиться с вашими требованиями:

  • Может быть сделано путем изменения столбца ключа в представлении таблицы.
  • Может быть сделано путем копирования столбца ключа, который фактически скопирует ключ и все значения на разных языках, а затем вставляет его в другое табличное представление, которое будет вставлять ключ и значения в разные столбцы таблицы.
  • Символы могут быть экранированы с помощью \uXXXX, не уверены, что он делает это только для символов, отличных от ISO-8591-1, или даже для всех символов, отличных от US-ASCII.
  • \uXXXX декодируется для редактора и записывается обратно в файл как \uXXXX.
  • Порядок свойств не изменяется, не уверен, как он обрабатывает комментарии.
  • Вы можете ввести многострочный текст и правильно записать в файл свойств.

Ответ 8

Это старый, но хороший инструмент.

JRC-Editor: http://zaval.org/products/jrc-editor/ он делает все за исключением, кроме как переопределяет ключи (сортирует их), которые могут быть не такими, какие вы хотеть. (Возможно, эта функция может быть отключена)

Хотя было бы нехорошо переупорядочивать ключи, я нашел это очень полезным, когда многие люди работают на одном комплекте ресурсов. У инструментов управления версиями, таких как SVN, есть больше шансов объединить отсортированные пакеты ресурсов.

Ответ 9

проверить j18n http://j18n.nomagicsoftware.com Он делает то, что вы хотите, и вводит наследование ресурсов, а также обеспечивает управление версиями для всех изменений.