Многоязычное переписывание 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:
Это может помочь вам, и если вы используете PrettyFaces на основе Rewrite, то у вас уже есть доступ к этой функции.