Grails G: выберите i18n - PullRequest
       0

Grails G: выберите i18n

1 голос
/ 26 ноября 2011

Я просто много читаю и гуглю, но сейчас я разочарован.

У меня есть модель домена Country

class Country{
   String countryCode //maybe EN, DE, CH...
}

Теперь я хочу перевод внутри.Я прочитал в документации (и с Google), что с помощью "id" можно выбрать его из файлов свойств сообщения перевода.Что-то вроде:

country.code.1=America
country.code.2=England
country.code.3=Germany

Но это не то, что я хочу.Я хочу получить что-то вроде:

country.code.US=America
country.code.EN=England
country.code.DE=Germany

Итак, я нашел возможное решение от stackoverflow: перевести элемент выбора HTML в Grails , что означало бы для меня, что я должен поместить его какэто:

<g:select name="country"
          from="${allCountries}"
          value="${country}"
          optionKey="id"
          optionValue="${ {countryCode->g.message(code:'country.code.'+countryCode)}  }"/>

Но мой результат находится внутри выпадающего списка: "country.code.grails.Country: 1" (и так далее для каждой страны)

Если я изменю последнюю строкуреализации gsp-g: выберите:

[...]optionValue="${ {countryCode->g.message(code:'country.code.US')}

, как вы видите, в жестком коде!И ЭТО работает: -D

Надеюсь, вы получили меня и можете мне помочь, большое спасибо!

1 Ответ

4 голосов
/ 26 ноября 2011

Существует 3 варианта:

  1. Вместо отправки идентификатора на контроллер, используйте contryCode вместо id:

    <g:select name="contryByCountryCode" 
        from="${countryCodes}" 
        valueMessagePrefix="com.yourcompany"/>
    

    Willпроизвести:

    <select name="contryByCountryCode" id="contryByCountryCode" >
        <option value="US">United States<option>
        ...
    </select>
    

    Если у вас настроены правильные сообщения.В бэкэнде нужно сделать что-то вроде:

    def country = Country.findByCountryCode(params.contryByCountryCode)
    
  2. Сделать это вручную:

    <select name="contryByCountryCode" id="contryByCountryCode" >
        <g:each in="${countryCodes}" var="country">
        <option value="${country.id}">
            ${message(code:"prefix" + country.countryCode)}
        <option>
        </g:each>
    </select>
    
  3. Патч g:select для работыесли определены optionValue и messagePrefix; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...