2016-04-01 2 views
3

Возможно ли получить перевод с языкового файла, который содержит (.) Точку?Laravel: получить перевод с языкового файла, содержащего точку

Например, каталог языка выглядит

/lang 
     /en 
      pagination.php 
      phone.history.php 

    /es 
      pagination.php 
      phone.history.php 

phone.history.php файл содержит точку и хочет получить перевод ключа «имя» из phone.history.php файла.

Lang::get('phone.history.name') 

Не работает.

+2

Почему бы не использовать подкаталог в качестве laravel? – jardis

+1

@ Emn1ty фактически использует точечную нотацию для подкаталогов, не работает при загрузке файлов перевода так же, как и для файлов конфигурации. В ключе переводчика может быть только один символ. – Bogdan

ответ

2

На самом деле ключ Laravel используется для перевода может содержать только одну точку. для того, чтобы работать и функция этой точки, чтобы отделить путь перевода файла (относительно каталога языка) из ключа массива перевода. Это потому, что Translator класс расширяет Illuminate\Support\NamespacedItemResolver класс, который parses the key используя следующую логику:

  • Сначала он определяет, имеется ли пространство имен присутствует (обозначается ::) и извлекает его.
  • Затем он делит ключ на group (который является относительным файловым путем) и item (который является ключом массива переводов).

Так что в вашем случае, поскольку нет пространства имен, когда вы используете это:

Lang::get('phone.history.name') 

В результате получается следующее:

  • Имя файла будет phone
  • перевод массив будет history (вместо name)

А поскольку в вашем языковом каталоге нет phone.php, это не сработает.


Так у вас есть два варианта здесь:

  1. Используйте другой символ в своем имени файла, так что есть только одна точка в параметре переводчик, что-то вроде /lang/en/phone_history.php, а затем использовать Lang::get('phone_history.name').

  2. Используйте подкаталог, если вы хотите сгруппировать некоторые файлы перевода, что-то вроде /lang/en/phone/history.php, а затем использовать Lang::get('phone/history.name') (к сожалению, как я уже говорил выше, вы можете использовать только одну точку в качестве разделителя, так что вы не можете использовать несколько уровня точка, как и для файла конфигурации Lang::get('phone.history.name')).

Смежные вопросы