Я мало что сделал с локальными, но i18n должен автоматически определять правильный локальный из браузера через заголовки, нет необходимости, чтобы что-то было в URL. Пока есть языковой пакет для конкретной локали, он будет пытаться получить свойства из этого файла.
На этой странице показан пример использования базового i18n (я только посмотрел на него, лично я всегда начинаю с http://struts.apache.org/2.x/, но учебник / руководства немного суховаты.
Почему вы должны ссылаться на что-либо в URL вообще относительно языка? Лично, если пользователь хочет переопределить локаль по умолчанию, я бы предоставил некоторую форму управления (меню) для этого. Затем я установил бы переменную в сеансе, затем я бы создал перехватчик, который вызвал бы setLocale для действия, используя локальный параметр в сеансе (если, конечно, есть набор значений). Таким образом, не будет никакой необходимости встраивать параметры в отдельные страницы, а локальный вне URL все вместе.
Есть способ сделать то, что вы хотите с помощью URL ... Что-то связанное с соглашениями и слешами в разрешении слешей в имени действия, я думаю. Я отправлю обратно, если я помню. Но я думаю, что выше, как правило, лучше подходить в любом случае.
Редактировать : Принимая во внимание то, что вы пытаетесь достичь, я вижу два совершенно разных решения.
1) Вы можете использовать прокси, входящие URL-адреса www.example.com/en/ и www.example.com/fr/ могут быть сопоставлены с различными веб-приложениями или даже с одним и тем же веб-приложением, но URL-адрес записано в форме, которая подходит для вашего приложения. Инструменты, которые могут сделать это, включают в себя: iptables, apache mod_rewrite, squid ... и множество других. Решение такого типа более ценно, если вы обрабатываете несколько IP-адресов / URL-адресов / приложений на одном сервере.
2) Вы можете установить свойство struts2 struts.enable.SlashesInActionNames , затем с помощью подстановочных знаков вы можете сделать что-то вроде:
<action name="*/*">
<result>/WEB-INF/content/{1}/{2}.jsp</result>
<action>
Вы также можете передавать параметры действиям, каждая звездочка в названии действия становится {1}, {2} и т. Д. Похоже, вам может понадобиться эта функция. Если кто-то еще знает, что в данный момент мне удается избежать того, как вы будете захватывать части URL-адреса, например, с помощью struts2 -ventionstions-plugin, чтобы действие могло использовать их, я нахожу это интересным.