Многоязычное переписывание URL с использованием Prettyfaces

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

http://localhost:8080/Wirote/index

Я хочу иметь это как следующее:

http://localhost:8080/Wirote/de/index --- display German content
http://localhost:8080/Wirote/en/index --- display English content
http://localhost:8080/Wirote/ar/index --- display Arabic content

Чтобы добиться этого, я следовал за шагом в: многоязычное переключение URL. Возможно ли это?

довольно-config.xml

<url-mapping id="base">    
    <pattern value="/#{localeManger.language}"/> 
 </url-mapping>

 <url-mapping id="index" parentId="base">
    <pattern value="/index"/>
    <view-id value="/index.xhtml"/> 
 </url-mapping>

Лица-config.xml

<application>
        <locale-config>
            <default-locale>de</default-locale>
            <supported-locale>en</supported-locale>
            <supported-locale>ar</supported-locale>
        </locale-config>
        <resource-bundle>
            <base-name>I18n.lang</base-name>
            <var>sprache</var>
        </resource-bundle>
    </application>

LocaleManger.java

@ManagedBean(name = "localeManger")
@SessionScoped
public class LocaleManger implements Serializable{

    private Locale locale;
    private static final long serialVersionUID = 2756934361134603857L;

    @PostConstruct
    public void init() {
 FacesContext.getCurrentInstance().getApplication().getDefaultLocale();
    }

    public Locale getLocale() {
        return locale;
    }

    public String getLanguage() {
        return locale.getLanguage();
    }

    public void setLanguage(String language) {
        locale = new Locale(language);
        FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    }}

Теперь, когда я запускаю проект, я получил только:

http://localhost:8080/Wirote/index

также страница застряла, поэтому я не могу перейти к другой, используя ссылки в index.xtml

В качестве альтернативы я добавляю следующее в index.xhtml:

  <f:metadata>
        <f:viewParam name="locale" value="#{localeManger.language}"/>
  </f:metadata>

довольно-config.xml

 <url-mapping id="index">
    <pattern value="/#{locale}/index"/>
    <view-id value="/index.xhtml"/> 
 </url-mapping>

Теперь, когда я запускаю проект, я получаю следующее:

http://localhost:8080/Wirote/de/index

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

http://localhost:8080/Wirote/en/index   or
http://localhost:8080/Wirote/ar/index

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

Как я могу получить правильный адрес, связанный с текущей локалью?

1 ответ

Я не уверен, поможет ли это вам, поскольку вы пытаетесь сделать это с помощью PrettyFaces, но в Rewrite (на основе которой основана библиотека PrettyFaces) есть специальная функция для интернационализации URL:

https://github.com/ocpsoft/rewrite/blob/master/documentation/src/main/asciidoc/configuration/i18n.asciidoc

Это может помочь вам, и если вы используете PrettyFaces на основе Rewrite, то у вас уже есть доступ к этой функции.

Другие вопросы по тегам