【问题标题】:Translation strings as keys in Laravel翻译字符串作为 Laravel 中的键
【发布时间】:2018-01-09 02:40:04
【问题描述】:

我阅读了Retrieving Translation Strings 上的翻译字符串文档,但不知何故我不明白如何应用它。

假设我想在视图posts.index 中呈现消息“我喜欢编程” 用英语、德语(“Ich mag Programmieren”)或西班牙语(“Me encanta programar”),取决于 App::setLocale() 设置的本地化。

翻译文件的外观如何?如何设置视图?

【问题讨论】:

    标签: laravel blade


    【解决方案1】:

    我终于明白了这个概念。在resources/lang 中,您可以为每种语言创建一个翻译 JSON 文件,例如。 g.:

    /resources
        /lang
            /de.json
            /es.json
    

    没有必要创建en.json 文件,因为如果您不使用App::setLocale() 设置语言,en 将是默认语言。

    de.json:

    {
         "I love programming.": "Ich mag programmieren."
    }
    

    es.json:

    {
         "I love programming.": "Me encanta programar."
    }
    

    接下来,您通过App::setLocale(); 在控制器中设置语言,现在有趣的部分来了。在视图中,您只包含 JSON 的键,例如。 G。

    {{ __('I love programming.') }}

    根据您的本地化,Laravel 会自动加载正确的翻译。

    【讨论】:

    • 我想知道是否有针对西班牙语等常用语言的预制 json 文件。虽然我能说一口流利的西班牙语,但我是一个非常大的项目的首席开发人员,而花这么多时间基本上创建一本字典的想法似乎不是一个明智的想法。
    【解决方案2】:

    我建议不要使用翻译字符串,而是使用键:

    1. 键包含上下文信息:main-screen.dialog.add-item-button - 您知道这是主屏幕上的一个按钮。这比使用字符串 Add Item 要好得多。
    2. BabelEdit 这样的编辑器将键显示为树。这使得编辑翻译的特定子集变得更加容易。使用字符串,你很容易得到一个列表,如AbortAdd itemAlabamaAlaskaAllArizona、..
    3. 您可以对同一文本的不同位置使用不同的翻译。例如。对于表单标签,如果您没有足够的语言空间,您可以创建较短的翻译。
    4. 如果您的主要语言发生变化,您不必更新所有翻译文件。例如。如果您添加决定将Hello world. 更改为Hello world!,您不必更新所有文件。

    【讨论】:

      【解决方案3】:

      将您的语言文件存储在resources/lang 中,结构将是这样的。

      /resources
          /lang
              /en
                  messages.php
              /es
                  messages.php
      

      所有语言文件都只返回一个键控字符串数组。例如:

      <?php
      
      return [
          'welcome' => 'Welcome to our application'
      ];
      

      然后,您必须定义捕获您的语言环境并设置它的路线。像这样

      Route::get('welcome/{locale}', function ($locale) {
          App::setLocale($locale);
      
          // your code here
      });
      

      然后只需使用dot notation 打印{{ __() }} 或使用@lang()

      {{ __('messages.welcome') }}
      
      <!-- OR -->
      
      @lang('messages.welcome')
      

      【讨论】:

      • 感谢您的快速跟进。其实这个方法我也很清楚。我不明白的是使用翻译字符串作为键的方法。但最后,我明白了这一点并添加了答案。
      • @Andreas 那太好了:-)
      【解决方案4】:

      Messages(您可以选择)是您的翻译文件的名称。

      对于每种语言,您在 lang 文件夹中创建一个目录。西班牙语是es。

      {{ trans('messages.cool') }}
      

      我希望这会有所帮助...

      【讨论】:

      • 感谢您的快速跟进。其实这个方法我也很清楚。我不明白的是使用翻译字符串作为键的方法。但最后,我明白了这一点并添加了答案。
      猜你喜欢
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      相关资源
      最近更新 更多