Существует ли полуавтоматический способ выполнить строковое извлечение для i18n?

Мы используем

  • Serna XML Editor
  • Eclipse (обычное редактирование XML, в основном используется техническими специалистами)
  • собственные специфические Плагин Eclipse (только для заметок о выпуске)
  • Плагин Maven docbkx
  • Баночка Maven со специальной таблицей стилей, основанная на стандартных таблицах стилей docbook
  • Плагин Maven для преобразования csv в таблицу DocBook
  • Плагин Maven для извлечения данных BugZilla и создания из него раздела DocBook
  • Hudson (для создания PDF-документов) [] 1111]
  • Nexus для развертывания созданных документов PDF

У нас есть несколько идей:

Развертывание с каждой версией продукта не только PDF, но и оригинального полного документа DocBook ( так как мы частично пишем документ и частично генерируем их). Сохранение полного документа DocBook делает их независимыми для изменений в настройках системы в будущем. Это означает, что если система изменится, из которой контент был извлечен (или заменен другими системами), мы больше не сможем генерировать точный контент. Что может вызвать проблему, если нам потребуется переиздать (с другой таблицей стилей) весь набор руководств по продукту. Так же, как с банками; эти скомпилированные Java-классы также размещаются в Nexus (вы не хотите хранить их в своем SCM); это мы также сделаем с сгенерированным документом DocBook.

Обновление:

Fresh создала подключаемый модуль Maven HTML Cleaner , который позволяет добавлять содержимое DocBook на сайт проекта Maven (доступна бета-версия). Обратная связь приветствуется через форум открытого обсуждения .

13
задан Kara 12 December 2013 в 23:42
поделиться

8 ответов

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

Система преобразования программ в в котором вы можете выразить свои желаемые шаблоны, это можно сделать. Такая система принимает правила в форме:

         lhs_pattern -> rhs_pattern  if condition ;

где шаблоны - это фрагменты кода с ограничениями категорий синтаксиса для переменных шаблона. Это заставляет инструмент искать синтаксис, соответствующий lhs_pattern, и, если он найден, заменять на rhs_pattern, где сопоставление с образцом осуществляется по языковой структуре, а не по тексту. Таким образом, он работает независимо от форматирования кода, отступов, комментариев и т. Д.

Набросок нескольких правил (и чрезмерное упрощение, чтобы сделать это коротким) following the style of your example:

  domain Java;

  nationalize_literal(s1:literal_string):
    " \s1 " -> "Language.getString1(\s1 )";

  nationalize_single_concatenation(s1:literal_string,s2:term):
    " \s1 + \s2 " -> "Language.getString1(\s1) + \s2"; 

  nationalize_double_concatenation(s1:literal_string,s2:term,s3:literal_string): 
      " \s1 + \s2 + \s3 " -> 
      "Language.getString3(\generate_template1\(\s1 + "{1}" +\s3\, s2);"
   if IsNotLiteral(s2);

The patterns are themselves enclosed in "..."; these aren't Java string literals, but rather a way of saying to the multi-computer-lingual pattern matching engine that the suff inside the "..." is (domain) Java code. Meta-stuff are marked with \, например, метапеременные \ s1, \ s2, \ s3 и встроенный шаблон вызывает \ сгенерировать с помощью (и) для обозначения его списка мета-параметров: -}

Обратите внимание на использование ограничений категории синтаксиса для метапеременных s1 и s3 для обеспечить соответствие только строковых литералов. То, что мета-переменные совпадают в шаблоне с левой стороны, подставляется в правую сторону.

Подшаблон generate_template - это процедура, которая во время преобразования (например, при срабатывании правила) оценивает свое известное значение. -константный первый аргумент в строку шаблона, которую вы предложили и вставляет в вашу библиотеку, и возвращает индекс строки библиотеки. Обратите внимание, что первый аргумент для создания шаблона состоит в том, что этот пример полностью состоит из конкатенированных буквальных строк.

Очевидно, кому-то придется вручную обработать шаблонные строки, которые попадают в библиотеку, для создания эквивалентов на иностранном языке.
You're right in that this may over templatize the code because some strings shouldn't be placed in the nationalized string library. To the extent that you can write programmatic checks for those cases, they can be included as conditions in the rules to prevent them from triggering. (With a little bit of effort, you could place the untransformed text into a comment, making individual transformations easier to undo later).

Realistically, I'd guess you have to code ~~100 rules like this to cover the combinatorics and special cases of interests. The payoff is that the your code gets automatically enhanced. If done right, you could apply this transformation to your code repeatedly as your code goes through multiple releases; it would leave previously nationalized expressions alone and just revise the new ones inserted by the happy-go-lucky programmers.

A system which can do this is the DMS Software Reengineering Toolkit. DMS can parse/pattern match/transform/prettyprint many langauges, include Java and C#.

4
ответ дан 2 December 2019 в 01:41
поделиться

Я думаю, что у eclipse есть опция для экстернализации всех строк в файл свойств.

0
ответ дан 2 December 2019 в 01:41
поделиться

Eclipse будет экстернализировать каждую отдельную строку и не строить автоматически подстановку, как вы ищете. Если у вас есть очень последовательное соглашение о том, как вы строите свои строки, вы можете написать сценарий perl, чтобы сделать некоторую интеллектуальную замену в файлах .java. Но этот сценарий станет довольно сложным, если вы захотите обработать

  • String msg = new String ("Hello");
  • String msg2 = "Hello2";
  • String msg3 = new StringBuffer (). Append (" Hello3 "). ToString ();
  • String msg4 =" Hello "+ 4;
  • и т. Д.

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

РЕДАКТИРОВАТЬ: Инструмент был Globalyzer от Lingport. На веб-сайте говорится, что он поддерживает экстернализацию строк, но не конкретно, как это сделать. Не уверен, поддерживает ли он замену переменных. Существует бесплатная пробная версия, поэтому вы можете попробовать и убедиться в этом.

2
ответ дан 2 December 2019 в 01:41
поделиться

Так же, как экстернализатор строк Eclipse , который генерирует файлы свойств, Eclipse имеет предупреждение для неинтернационализированных строк, что полезно для поиска файлов, которые вы не интернационализировали .

String msg = "Hello " + name;

выдает предупреждение «Невынесенный строковый литерал; за ним должен следовать // $ NON-NLS- $». Для строк, которые действительно входят в код, вы можете добавить аннотацию ( @SuppressWarnings ("nls") ) или добавить комментарий:

String msg = "Hello " + name; //$NON-NLS-1$

Это очень полезно для преобразования проекта в правильную интернационализацию .

1
ответ дан 2 December 2019 в 01:41
поделиться

Вы можете использовать метод «Externalize String» из eclipse. Откройте файл Java в редакторе, а затем щелкните «Внешняя строка» в главном меню «Источник». ИТ-отдел сгенерирует для вас файл свойств со всеми параметрами, которые вы отметили в выборе.

Надеюсь, это поможет.

0
ответ дан 2 December 2019 в 01:41
поделиться

, поскольку все взвешивают в среде IDE думаю, мне лучше встать на защиту Netbeans :)

Инструменты -> Интернационализация -> Мастер интернационализации

очень удобен ..

0
ответ дан 2 December 2019 в 01:41
поделиться

Идея InteliJ - еще один инструмент которые имеют эту функцию.

alt text

Вот ссылка на демонстрацию

0
ответ дан 2 December 2019 в 01:41
поделиться

Globalyzer обладает обширными возможностями по обнаружению, управлению и экстернализации строк, а также значительно ускоряет работу по сравнению с просмотром строк и их извлечением одна за другой. Вы можете фильтровать строки, а также видеть их в контексте, а затем выводить их в экстернали по одной или группами. Он работает с широким спектром языков программирования и типов ресурсов, включая, конечно, Java. Плюс Globalyzer найдет для ваших проектов интернационализации гораздо больше, чем просто встроенные строки. Вы можете прочитать больше на http://lingoport.com/globalyzer и там есть ссылки для регистрации демо-счета. Globalyzer сначала создавался для выполнения крупных сервисных проектов по интернационализации, а затем с годами превратился в полномасштабный корпоративный инструмент, обеспечивающий интернационализацию разработки и ее сохранение.

1
ответ дан 2 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

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