Grails - Language prefix v mapování adres URL

hlasů
0

Hi there im mající problém s mapováním jazyka. To, jak chci, aby to fungovat, je, že jazyk je zakódována v url, jako / appname / de / MYCONTROLLER / cokoliv

Pokud půjdete do / appname / MYCONTROLLER / akce je třeba zkontrolovat vaši relaci a není-li pick relace jazyk založený na preferenci prohlížeče a přesměrovat do jazyka předponou místě. Máte-li relaci, pak se zobrazí anglicky. Angličtina nemá en předponou (udělat to těžší).

Tak jsem vytvořil mapování, jako je tento:

class UrlMappings {
    static mappings = {
        /$lang/$controller/$action?/$id?{
            constraints {
                lang(matches:/pl|en/)
            }
        }
        /$lang/store/$category {
            controller = storeItem
            action = index
            constraints {
                lang(matches:/pl|en/)
            }
        }
        /$lang/store {
            controller = storeItem
            action = index
            constraints {
                lang(matches:/pl|en/)
            }
        }


        /$controller/$action?/$id?{
            lang=en
            constraints {
            }
        }
        /store/$category {
            lang=en
            controller = storeItem
            action = index
        }
        /store {
            lang=en
            controller = storeItem
            action = index
        }


      /(view:/index)
      500(view:'/error')
    }
}

Není to plně funkční a langs jsou napevno právě teď. Myslím, že jsem udělal něco špatného. Některé z reverzní mapování fungovat, ale některé dont přidat jazyk.

Pokud mohu použít link tag a předat params: [Lang: 'pl'] pak to funguje, ale pokud přidám params: [Lang: 'pl', strana: 2] pak tomu tak není. Ve druhém případě oba lang a číslo stránky stanou parametry v řetězci dotazu. Co je horší, že dont mít vliv na národní tak stránka zobrazí v anglické.

Může mi někdo prosím, místo abych se v dokumentaci, jaké jsou pravidla zpětné mapování nebo dokonce lepší, jak implementovat tuto jazykovou předponu v dobrém slova smyslu?

DÍK

Položena 12/05/2010 v 13:33
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
3

Největší problém, který budou muset vypořádat s má žádnou předponu pro angličtinu. Většinu svého mapování zdá naprosto v pořádku. Doporučil bych vám umožní pracovat s názvem mapování.

Ale nejprve bych doporučujeme pracovat s filtry pro nastavení parametru jazyka pro každého uživatele.

def filters = {
    languageCheck(controller: '*', action: '*') {
        before = {
            if( params.lang == null) {
                redirect( controller: params.controller, action: params.action, params:[ "lang": request.locale.language.toString() ] + params )
            }
        }
    }
}

Pokud se uživatel s parametrem chybějící jazykové váš web vstoupí jazyk je nastaven filtru a ten je přesměrován do řídicí jednotky s parametrem jazyka. Dávejte pozor, pokud používáte bezpečnostní systém, který je rovněž přesměrovala. Můžete přesměrovat pouze jednou. V takovém případě budete muset vyloučit tyto adresy nebo řadiče z filtru.

Nyní se podíváme na vaši mapování problému. Vzhledem k tomu, Grails 1.2 jsou tzv pojmenovaných mapování adres URL. Např

name storeCategory: "/$lang/store/$category" {
        controller = "storeItem"
        action = "index"
        constraints {
            lang(matches:/pl|en/)
        }
    }

Uvnitř GSP se můžete obrátit na vašeho názvem mapování s

<g:link mapping="storeCategory" params="[lang:'en', category:'new']">Category</g:link>

To by mělo vyřešit váš problém. Najdete zde všechny informace o pojmenované mapování v Grails reference

Odpovězeno 22/06/2010 v 18:53
zdroj uživatelem

hlasů
0

Já bych rád dodal toto: pokud máte další params, které by měly být připojeny pomocí param = hodnota, budete mít problémy, pokud nechcete explicitně přidat do mapování adres URL. Je to proto, že mapování URL resolver respektuje parametr řídicí a akční jako parametry se zvláštním významem a bude odpovídat pouze mapování, které mají přesně stejnou sadu parametrů pro vytváření vazeb.

Nicméně, když používáte stránkování, budete mít stále problémy.

Takže kromě výše, postupujte následovně:

class LangAwareUrlMappingsHolderFactoryBean extends UrlMappingsHolderFactoryBean {

    @Override
    public UrlMappingsHolder getObject() throws Exception {
        def obj = super.object
        obj.DEFAULT_CONTROLLER_PARAMS = [UrlMapping.CONTROLLER, UrlMapping.ACTION,     "lang"] as Set
        obj
    }   
}

A upravte resources.groovy :

"org.grails.internal.URL_MAPPINGS_HOLDER"(LangAwareUrlMappingsHolderFactoryBean) { bean ->
    bean.lazyInit = true
}

A získáte

/en/controller/action?offset=10

namísto

/controller/action?offset=10&lang=en
Odpovězeno 08/05/2013 v 15:23
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more