Я разрабатываю приложение с использованием GWT (первый таймер), и теперь я на том этапе, когда хочу создать центральную структуру для предоставления фактического текстового контента для моего Просмотры.Интернационализация очень длинных текстов с GWT (желательно включая HTML)
Несмотря на то, что возможно определить эти текстовые значения inline (используя UiBinder или вызвать соответствующие методы для соответствующих объектов), мне было бы гораздо удобнее хранить их в центральном месте, как это возможно, используя GWT's Constants
. Действительно, мое приложение будет доступно только на одном языке (на данный момент), поэтому все-таки i18n может показаться излишним, но я предполагаю, что эти объекты могут быть лучше всего подходят для того, что мне нужно, так как они тоже , должно быть, было разработано с учетом всего (постоянного) текстового контента.
Однако мое приложение имеет несколько фрагментов текста, которые несколько длиннее и сложнее, чем ваш средний текст ярлыка, то есть они могут охватывать несколько строк и могут потребовать базового форматирования текста. Я придумал несколько идей о том, как исправить эти проблемы, но я далек от удовлетворения.
Первая проблема: Длинные строки.
import com.google.gwt.i18n.client.Constants;
public interface AppConstants extends Constants {
@Constants.DefaultStringValue("User Administration")
String userAdministrationTitle();
// ...
}
Образец выше, содержит очень простое строковое значение, определенное таким образом, что статической строку интернационализации диктует (насколько я знаю). Для того, чтобы добавить поддержку для другого языка, скажем, немецкий, один обеспечит .properties
файл, содержащий перевод:
userAdministrationTitle = Benutzeradministration
Теперь можно легко злоупотребить эту модель до точки и никогда не обеспечивают DefaultStringValue
, оставив пустую строку вместо , Затем можно создать файл .properties
для языка по умолчанию и добавить текст, похожий на перевод. Даже тогда, однако, это (насколько мне известно) не представляется возможным применить разрывы строк для длинных значений просто сохранить файл несколько хорошо отформатирован, как это:
aVeryLongText = This is a really long text that describes some features of the
application in enough detail to allow the user to act on a basis
of information rather than guesswork.
Вторая проблема: Форматирование части текст.
Поскольку значения представляют собой простые строки, там не так много места для форматирования. Инстинктивно, я бы сделал то же самое, что и если бы я писал текст прямо в обычный HTML-документ и добавлял HTML-теги, такие как <strong>
или <em>
.
Дальше по дороге, в точке, где строки считываются и применяются к виджету, который будет отображать их, возникает проблема: установка значения с использованием метода, такого как setText(String)
, приводит к тому, что строка будет экранирована, а HTML-теги, которые будут печататься вместе с остальной частью текста, а не интерпретироваться как инструкции форматирования. Так не повезло.
Способ решения этой проблемы заключается в том, чтобы отключить строку, предоставленную файлом i18n, и изолировать любые HTML-теги, а затем снова объединить беспорядок вместе с помощью SafeHtmlBuilder
и использовать это, чтобы установить значение виджета, что действительно приведет к отображению форматированного текста. Однако это звучит как большая часть сложностей, поэтому мне не совсем нравится эта идея.
Итак, что я ищу сейчас, дорогой пользователь, который на самом деле прочитал это полностью (спасибо!)? Я ищу решения, которые не требуют таких хаков, как описанные выше, и предоставляют функциональность, которую я ищу.В качестве альтернативы, я приветствую любое руководство, если я ошибаюсь полностью (первый таймер GWT, как я упоминал одну вечность назад :-)). Или в основном что-нибудь, что по теме, и может помочь найти решение. Допустимым решением, например, была бы такая система, как string value files used in Android development (которая позволяет создавать HTML-тексты, но, очевидно, требует, чтобы содержащиеся элементы пользовательского интерфейса принимали это).