Laravel:如何加载本地语言文件?

时间:2017-11-21 11:56:17

标签: php laravel-5

在Laravel 5中给出以下文件结构(en相同):

  resources/
            de/
               list.php 
               countries.php
               mail.php
               pages/
                   pageA.json
                   pageB.json

我想知道:

  1. __(..)@lang(..)是否因文件pages.json文件的存在而受到干扰?

  2. 如何加载语言文件?

  3. 这是我自己设法找到的:

    函数__('list.button_send')使用getFromJson($key, array $replace = [], $locale = null)

    触发$key = 'list.button_send'

    这是该功能的主要部分:

    $locale = $locale ?: $this->locale;
    
    // For JSON translations, there is only one file per locale, so we will simply load
    // that file and then we will be ready to check the array for the key. These are
    // only one level deep so we do not need to do any fancy searching through it.
    $this->load('*', '*', $locale);
    
    $line = $this->loaded['*']['*'][$locale][$key] ?? null;
    

    我已经对评论感到困惑 - 我的翻译在三个不同的*.php文件中。 Taylor为什么要谈论单个JSON文件?但是如果我们忽略它并继续,就会发现load函数看起来像这样:

    // The loader is responsible for returning the array of language lines for the
    // given namespace, group, and locale. We'll set the lines in this array of
    // lines that have already been loaded so that we can easily access them.
    $lines = $this->loader->load($locale, $group, $namespace);
    
    $this->loaded[$namespace][$group][$locale] = $lines;
    

    我不知道为什么需要使用$namespace$group来调用此函数,因为我们认为它们始终位于*Translator类。但也忽略了这一点,我来到了有趣的部分:什么是$lines?我猜它是一个形式的数组

    $lines = ['list' => ... , 'countries' => ..., 'mail' => ...];
    

    将回答我的问题:

    1. 他们不会干涉

    2. 如果有人在lang中访问单键,那么lang中的所有语言文件(意味着该目录中的所有*.php)都会加载并存储在{{ 1}}对象。

    3. 然而,我无法证实我的猜测。为了做到这一点,我需要找出Translator实际上做了什么。但$this->loader->load($locale, $group, $namespace);在构造函数中通过依赖注入分配,我找不到它的定义。

0 个答案:

没有答案