Несколько локалей / связок в одном представлении - PullRequest
1 голос
/ 25 января 2012

У нас есть пользовательский интерфейс в JSF 2.0 , который разделен на две части: одна находится в пользовательской локали, а другая в выбранной локали.Например, если пользователь француз, который решает выбрать английский, некоторые компоненты страницы написаны на французском, другие - на английском.

Возможно ли этого добиться?

Простой f:loadBundle не принимает никакой локали и использует тот, который определен в его родительском f:view, поэтому кажется, что мы можем определить только одну локаль для представления.

Может быть, мы можем использовать несколько f:view?Мы немного попробовали, и сервер не жаловался так много, но JavaDoc говорит, что f: view - это «Контейнер для всех Ядро JavaServer Faces и используемые действия пользовательских компонентов на странице", поэтому я не думаю, что это должно быть безопасно.

Ответы [ 2 ]

3 голосов
/ 25 января 2012

Это невозможно с помощью средства <f:loadBundle>. Вы действительно можете иметь только одну локаль во всем представлении, и в нее нельзя вкладывать теги <f:view> (технически это будет работать, но вложенный тег будет просто игнорироваться)

Лучше всего создать управляемый компонент, который расширяет ResourceBundle, оборачивает пакет в желаемую локаль и делегирует ему вызовы. Как то так:

@ManagedBean
@RequestScoped
public class BundleBean extends ResourceBundle {

    private ResourceBundle wrapped;

    public BundleBean() {
        // You can get/supply the locale as a parameter or property.
        // Again, just a basic kickoff example.
        wrapped = ResourceBundle.getBundle("com.example.i18n.text", new Locale("fr"));
    }

    @Override
    protected Object handleGetObject(String key) {
        return wrapped.getObject(key);
    }

    @Override
    public Enumeration<String> getKeys() {
        return wrapped.getKeys();
    }

}

Вы можете использовать его обычным способом:

#{bundleBean.someKey}
#{bundleBean['some.key.with.periods']}
0 голосов
/ 01 февраля 2012

Почему бы просто не поместить английские значения в комплект ресурсов по умолчанию (без суффикса)?Таким образом, он будет отображаться, если для текущей локали нет подходящей строки.

...