1

私の UrlMappings の一部は次のようになります。

"/$lang"(controller: "main", action: "front") {
        constraints {
            lang inList: ['hr', 'sl', 'si']
        }
    }

lang「si」なら「sl」に設定したいので、以下のフィルターを作成しました。

def filters = {
    all(controller: '*', action: '*') {
        before = {
            if(params.lang == 'si') {
                params.lang = 'sl'
            }
        }
    }
}

問題:params.langコントローラー内では必要な値 ('sl') が取得されますが、ビューでparams.langは元の値 ('si') に解決されます。この問題を解決するために何を提案しますか?

ありがとうございました!

4

1 に答える 1

0

リダイレクトを使用してみてください。私はこのようにしました:

def filters = {
        pages(controller: 'pages', action: 'home|services|projects|project_details|contact_us|career|about_us|downloadCaseStudy') {
            before = {
                if (params.lang) {
                    if (!(params.lang in grailsApplication.config.i18nFields.locales)) {
                        session."$SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME" = null
                        params.remove('lang')
                        response.sendError(404)
                        return
                    }
                    if (params.lang == grailsApplication.config.defaultLocale) {
                        RCU.getLocaleResolver(request).setLocale(request, response, new Locale(params.lang))
                        params.remove('lang')
                        chain(controller: "pages", action: params.action, model:chainModel?:[:],params: params)
                        return false
                    }
                } else {
                    String langCode = RCU.getLocale(request).getLanguage()
                    if (!(langCode in grailsApplication.config.i18nFields.locales)) {
                        params.lang = grailsApplication.config.defaultLocale
                        return
                    } else if (langCode != grailsApplication.config.defaultLocale) {
                        params.lang = langCode
                        chain(controller: params.controller, action: params.action, model:chainModel?:[:], params: params)
                    }
                    return true
                }
            }
            after = { Map model ->

            }
            afterView = { Exception e ->

            }
        }

簡単な説明: /ru/about_usのような URL を作成します。
1. lang がリストにない場合 - 404.
2. lang = grailsApplication.config.defaultLocale の場合、/en/about_usの代わりに /about_usのみを表示します。
3. lang パラメータが指定されていない場合 - リクエストから解決します。

于 2013-05-06T11:18:40.907 に答える