Динамическая ссылка Ember i18n внутри перевода

Мне было интересно, как я могу передать ссылку помощнику {{t}}. В настоящее время я использую версию 3.0.1 Ember i18n.

Очевидно, что вы не можете передать вспомогательную функцию link в вспомогательную функцию t (что-то вроде

{{ t "some-translation-string" link={{#link-to 'page' model}}page{{/link-to}} }}

конечно не получится).

Поэтому я подумал, может быть, я могу создать собственный реквизит, который возвращает целую ссылку. Но опять же, как мне создать эту ссылку? Кто-нибудь знает метод, который имеет те же аргументы, что и помощник link-to, но возвращает только ссылку (в моем случае 'page' и model)?


person Jacob van Lingen    schedule 10.06.2015    source источник
comment
Зачем передают ссылку в переводе? Хотите ссылку с переведенным названием? Или вы хотите изменить URL через i18n?   -  person Andrey Mikhaylov - lolmaus    schedule 10.06.2015
comment
Нет, это просто ссылка на другую страницу. Например: Go to <a>settings</a> page. В другом языке ссылка может находиться в другом месте предложения. Итак, я хочу ссылку в переводе, а не в представлении.   -  person Jacob van Lingen    schedule 10.06.2015
comment
Чтобы узнать о реальном решении этой проблемы, см. интерполяция-i18n.   -  person Jacob van Lingen    schedule 23.02.2017


Ответы (2)


Возможно, вы сможете добиться этого с помощью базовой ссылки, но я сомневаюсь, что вы сможете добавить активную ссылку на компонент внутри перевода.

Поэтому вместо этого разделите строку перевода на части:

{{t 'goToSettingPage-before'}}
{{link-to (t 'goToSettingPage-link') 'route.name'}}
{{t 'goToSettingPage-after'}}
'goToSettingPage-before': 'Go to'
'goToSettingPage-link':   'settings'
'goToSettingPage-after':  'page.'
person Andrey Mikhaylov - lolmaus    schedule 10.06.2015
comment
Да, я понимаю. Но это обходной путь, а не решение. Тем не менее, спасибо, что указали мне на это направление. - person Jacob van Lingen; 10.06.2015
comment
В основном вы хотите, чтобы подсистема i18n работала с шаблонами Handlebars, а не с текстовыми строками. - person Andrey Mikhaylov - lolmaus; 10.06.2015
comment
Да, это было бы здорово :P - person Jacob van Lingen; 11.06.2015

Вы можете создать помощника, который будет делать именно то, что вы хотите, используя ember-href-to.

Помощник:

compute (params) {
  const i18n = this.get('i18n');
  const target = hrefTo(this, params[1]);
  // const targetParam = params[2]; //dynamic segment
  const text = i18n.t(params[0]);

  return Ember.String.htmlSafe('<a href='+ target +'>' + text +'</a>');
}

Использование шаблона:

{{t "linkExample-learnMore" link=(helper-name 'linkExample-here' 'some.route')}}

Переводы:

"linkExample-learnMore": "Click {{{link}}} to do something",
"linkExample-here":"here"
person RhinoWalrus    schedule 12.05.2017
comment
Да, теперь я знаю. Еще в феврале я разместил комментарий к своему вопросу: For a real solution to this problem, see stackoverflow.com/questions/40265294/link-interpolation-i18n‌​.. - person Jacob van Lingen; 15.05.2017
comment
Извините, я пропустил это. Надеюсь, этот ответ поможет кому-то еще в будущем. - person RhinoWalrus; 15.05.2017