Если вы программируете на Python, это подпружиненная функция со встроенной функцией all()
, примененной к списку ваших переменных (я просто буду использовать здесь логические литералы):
>>> L = [True, True, True, False, True]
>>> all(L) # True, only if all elements of L are True.
False
>>> any(L) # True, if any elements of L are True.
True
Есть ли соответствующая функция на вашем языке (C #? Java?). Если так, то это, вероятно, самый чистый подход.
Ну, вам пришлось использовать ResourceBundle
s. Но если вы устанавливаете свойство текста компонента, используйте вместо текста, удобочитаемого человеком, текст для RB.getString ()
. Тогда, если Matisse регенерирует из формы, ключ пакета останется, и локализация будет работать. Пример:
Я буду использовать это изображение со страниц Matisse:
(источник: myeclipseide.com ) .
там вы можете увидеть текст свойства . Есть значение «Моя новая метка». Вместо этого вы можете использовать rb.getString ("myNewLabel.my.message")
, где rb
- это ResourceBundle
. Единственная проблема должна заключаться в том, что слишком умный редактор свойств идет против вас.
This is how I implemented the internationalization :
It works with generated code or with manual created code.
Edit: Here it is :
public void buildIds() {
buildId(true);
int count = getComponentCount();
if (count == 0) {
return;
}
for (int i = 0; i < count; i++) {
Component component = getComponent(i);
if (component instanceof AbstractComponent) {
((AbstractComponent) component).buildIds();
}
}
}
protected void buildId(boolean fireChange) {
String prevId = this.id;
String computedId;
if (getName() == null) {
computedId = ClassUtilities.shortClassName(getClass()).toLowerCase() + "_" + Long.toHexString(ID_GENERATOR.getAndIncrement());
} else {
java.util.List<Component> parents = null;
Component parent = getParent();
if (parent != null) {
StringBuilder buider = new StringBuilder(80);
parents = new ArrayList<Component>();
while (parent != null) {
if (parent.getName() != null) {
parents.add(parent);
}
parent = parent.getParent();
}
Collections.reverse(parents);
if (parents.size() > 0) {
for (Component component : parents) {
if (buider.length() > 0) {
buider.append('.');
}
buider.append(component.getName());
}
buider.append('.');
}
buider.append(name);
computedId = buider.toString().toLowerCase();
} else {
computedId = name;
}
}
this.id = computedId;
if (fireChange && prevId != null && !prevId.equals(computedId)) {
componentIdChanged(this, prevId);
}
}
Я не знаю другого пути, кроме ResourceBundle.
Почему вы продолжаете восстанавливать код? Я полагаю, что после того, как вы запустили страницу, все будет хорошо, но после этого в этом уже не будет необходимости. Похоже, генерация кода - ваша настоящая проблема. Это вам ничего не спасает.
Вы пытаетесь составлять страницы из нескольких компонентов? Я могу представить себе общий верхний колонтитул, нижний колонтитул и меню, которые не нужно было бы постоянно менять. Это может быть проблема дизайна.
Spring очень хорошо поддерживает I18N. Может быть, здесь это поможет.