Grails set language (internationalization) via URL mappin - url

I'm interested in supporting English and French in my Grails app with user-friendly URL.
format: /appname/language/controller/action
example: /store/en/product/list
What is the best way without passing as a parameter (?lang=fr) then rewriting the URL.
Thanks

Adding the following mapping in your appname\grails-app\conf\UrlMappings.groovy should do it.
"/$lang/$controller/$action?/$id?"{
}
See the URL mapping article on the grails website for details.

Related

Umbraco - Encode URL following the same rules as defined in the request handler settings

In Umbraco, i want to generate URL encoded string as it was a genuine Umbraco path.
So if i have the following relative path:
/products/4/drinking glass
I want it encoded like this:
/products/4/drinking-glass/
As it would if i used NiceUrl on a published content object.
Following the same rules as described in the request handler part of umbracoSettings.config.
Is there a way to do that?
I found the answer after searching a bit more.
Umbraco made an extension method for this purpose:
"drinking glass".ToUrlSegment()
Which provides a safe way to generate custom url encoded strings.

I need referrer URI in Grails 2.x

I'm using Grails 2.4.4 and trying to get the browser url which loaded my grails app (referrer url) in my controller. I have searched SO and google already, looked in documentation but it seems like i'm searching for a mythical creature.
// inside my before interception
String referer = request.getHeader("Referer");
println "referer= "+referer // null
Anyone done this?

redirect user from php url to grails page

I am using grails 2.X.
when user hits on http://www.abcdef.com/redir/abc.php?id=123, i want to redirect user to some other url mappings like http://www.abcdef.com/abcd.
I already used grails filter but can't get appropriate solution.
Can anyone tell me how to do so using grails?
Do we need Filters or some scripts to achieve this.
Thanks in advance.
This can be achieved in UrlMappings.groovy. This configuration should suit your needs:
"/$controller.$suffix" {
constraints {
suffix(matches: 'php')
}
}

Asp.net url rewriting, without CNAME

I have to use URL filtering in one of my sites.
Take for example the site:
http://default.net
and I wish I could add something to the URL and filter based on that.
http://foo.default.net
In writing this I would like to retrieve the "foo" and can use it.
This URL filtering should be done without CNAME (ie dynamic).
PS: Note that I do not want http://default.net/foo but http://foo.default.net.
You may take a look at the following article which illustrates how you could define domain routes.

struts2 localization by embedding the locale code in the action name rather than by using ...?request_locale=<locale_code>

hi all,
i want to make localization feature in a website written in struts 2. as far as i know, the standard way of doing so is using get in the following manner:
http://.../namespace/action_name?request_locale=<locale code>
however, my boss doesn't like such hairy url. instead, i'm required to write it in the following manner:
http://.../namespace/a_param/<locale code>/another_param...
i tried to change the action mapping in my struts.xml into something like
<action name="*/*..." ... >
<param name="locale">{2}</param>
...
</action>
it doesn't work
after i changed it into
<action name="*/*..." ...>
<param name="request_locale">{2}</param>
...
</action>
it doesn't work either T_T
by the way, i know there is trick of putting ActionContext.getContext().setLocale(new Locale(...)); in action which basically change the locale for that instance. however, it seems that the effect will only be transient (in contrast, i18n saves the chosen locale in session, which basically makes it quite persistent.
so, how to change the locale by embedding the locale code in the url?
Your help is highly appreciated =D
I have not done much with locals but i18n should automatically determine the correct local from the browser via the headers, there is no need for anything to be in the url. As long as there is a language bundle for the particular locale it will try to pull properties from that file.
This page shows an example of using basic i18n (only looked at it for a moment, personally I always start at http://struts.apache.org/2.x/ but the tutorial/guides are a bit dry.
Why do you need to refer to anything in the url at all concerning language? Personally if the user did want to override the default locale I would provide some form of control (menu) to do so. Then I would set a variable in session then I would create an interceptor which would call setLocale on the action using the local parameter on the session (if there is a value set of course). This way there would not be any need to embed parameters into individual pages and the local is out of the url all together.
There is a way to do what you want with the url... Something to do with conventions and slashes in allowing slashes in the action name I think. I'll post back if I remember. But I think the above is generally a better approach anyways.
Edit: Taking into consideration what you are trying to accomplish I can see two very different solutions.
1) You can use a proxy, the incoming URL www.example.com/en/ and www.example.com/fr/ can be mapped to different web applications or even the same web application but the url is re-written into a form that suites your application. Tools that can do this include: iptables, apache mod_rewrite, squid... and a multitude of others. This type of solution is more valuable if you handle multiple ip addressses/urls/applications on one server.
2) You can set the struts2 property struts.enable.SlashesInActionNames then using wildcards you can do something like:
<action name="*/*">
<result>/WEB-INF/content/{1}/{2}.jsp</result>
<action>
You can also pass parameters to actions each asterisk found in the action name becomes {1}, {2}, etc. It sounds like you might need this feature. If someone else knows it escapes me at the moment how you would capture parts of the url like this with struts2-conventions-plugin so the action can make use of them I would find that interesting.
#Quaternion
basically the intention is that, the website has several national "sub-website". based on user's ip address, he/she will be redirected to the national "sub-website". it's like when you open www.google.com, you may be redirected to www.google.com.country_domain.
each national "sub-website" has several languages, with 1 default language. it's just like when you open google israel website, by default you will see a website written in hebrew language, although you can override this default choice by choosing it to be in english.
in my planned website, following isreal website and hebrew language example, it is supposed to be like this:
the user is in israel
he is opening www.abcdef.com
the server is recognizing that the client is in israel. there are 3 languages can be chosen for the israel "sub-website": hebrew, arabian, english. the default one is hebrew, but client can override this choice
the user is then redirected to www.abcdef.com/il/he ("il" stands for israel country and "he" stands for hebrew language)
but the user is apparently a british tourist with no knowledge on hebrew or arabian language. so he/she chose english language
he/she will be redirected to www.abcdef.com/il/en ("en" stands for english language)
the next time that client opens www.abcdef.com in israel again (assuming the cookies & sessions are still around), he/she will be redirected to www.abcdef.com/il/en
thx fr your help =D
Definitely I would leave the responsibility to handle the Locale to an interceptor.
Here is a tutorial to Create an Interceptor.
This interceptor can be placed in a common stack shared by all (or most of) incoming requests and it will assign the locale
ActionContext.getContext().setLocale(locale);
with the proper logic that could take into account:
query-string parameters
stored user preferences
cookies
session
browser preferences (are in the request)

Resources