Heim  >  Artikel  >  Backend-Entwicklung  >  Lernen des Laravel-Lokalisierungsmoduls

Lernen des Laravel-Lokalisierungsmoduls

不言
不言Original
2018-06-13 16:48:311040Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Informationen zum Lokalisierungsmodul des Laravel-Lernprogramms vor. Der Artikel stellt es Ihnen anhand von Beispielcodes ausführlich vor es Lasst uns gemeinsam lernen.

Vorwort

In diesem Artikel werden hauptsächlich die relevanten Inhalte zum Laravel-Lokalisierungsmodul vorgestellt und als Referenz und zum Studium bereitgestellt. Es gibt nicht viel zu tun Lassen Sie uns nun einen Blick auf die ausführliche Einleitung werfen.

Dieser Artikel basiert auf der Analyse und dem Schreiben des lokalisierten Modulcodes der Laravel 5.4-Version

Modulzusammensetzung

Die folgende Abbildung zeigt die Beziehung zwischen den verschiedenen Dateien des Lokalisierungsmoduls und gibt eine kurze Beschreibung


  • TranslationServiceProvider
    Der Dienstanbieter des Lokalisierungsmoduls ist nicht nur der Eingang zu einem Modul, sondern auch das Zentrum der Interaktion mit dem IOC-Container. Registrieren Sie den Übersetzungsinstanzübersetzer und deklarieren Sie den verzögerten Ladedienst 🎜>

  • Übersetzer

    Übersetzungsmanagementklasse;

  • MessageSelector

    Der Nachrichtenfilter wählt die entsprechende Nachricht aus, indem er den komplexen Wert beurteilt. Der Nachrichteninhalt ist beispielsweise so: {0} nein | [1,19] einige |. dann sind die zuletzt ausgewählten Nachrichten „some“

  • LoaderInterface

    Übersetzerschnittstelle; deklariert drei Methoden: Load, AddNamespace, Namespaces; Erbt LoaderInterface und erhält lokalisierte Ressourcendaten aus Dateien

  • ArrayLoader

    Erbt LoaderInterface und verwendet Arrays, um lokalisierte Ressourcendaten im Speicher zu verwalten;



  • Konfigurationsanweisungen

Die Parameter für dieses Modul im Konfigurationsverzeichnis sind nur „locale“ und „fallback_locale“ in der Datei „app.php“. locale gibt die Standardlokalisierungssprache an, sodass Übersetzungen zuerst von der Sprachressource abgerufen werden Verzeichnisinhalt (Konvertierung); Wenn die durch das Gebietsschema dargestellte Sprache nicht vorhanden ist, wird die alternative Sprache fallback_locale verwendet.

Das Gebietsschema des Autors ist zh_CN und das fallback_locale ist en; >

Funktionseinführung


Das globale Sprachressourcenverzeichnis befindet sich unter resources/lang des Projekts. Jedes Unterverzeichnis ist nach der Sprache benannt, z. B. en , zh_CN usw.;

Einige andere Unterverzeichnisse sind nach Namespaces benannt, die einen zusätzlichen Ersatz für Bibliotheksressourcendateien von Drittanbietern darstellen. Es können auch JSON-Dateien wie en.json vorhanden sein und zh_CN, und Projekte beginnen manchmal mit dem Lesen von Json-Dateien. Diese Daten stammen aus dieser vorhandenen Json-Datei

Globale Sprachressourcen übersetzen

Die Sprache des Autors Ressourcenstammverzeichnis resources/ Unter lang befindet sich zh_CN/validation.php. Der Inhalt lautet wie folgt:

<?php
return [
 &#39;accepted&#39;  => &#39;:attribute 必须接受。&#39;,
 &#39;active_url&#39;  => &#39;:attribute 不是一个有效的网址。&#39;,
 &#39;after&#39;  => &#39;:attribute 必须是一个在 :date 之后的日期。&#39;,
 ......
];

Durch Aufrufen des Codes

app(&#39;translator&#39;)->trans(&#39;validation.accepted&#39;, [&#39;attribute&#39; => &#39;用户名&#39;])

Oder die globale Hilfsfunktion trans

trans(&#39;validation.accepted&#39;, [&#39;attribute&#39; => &#39;用户名&#39;])

gibt „Benutzername muss akzeptiert werden.“; 🎜>

Der Aufrufvorgang ist wie folgt:

Parsen Sie den Schlüsselnamen: Parsen Sie den Schlüsselnamen in ein Array (

); bedeutet, dass es sich im globalen Namensraum befindet; Gruppe ist eigentlich der Dateiname; die Bedeutung des Elements ist:

locale ist hier null, daher wird ein Array zurückgegeben, das aus den Standard- und Backup-Sprachen besteht, also ['zh_CN', 'en']. Führen Sie eine for-Schleife aus und geben Sie das Sprachressourcenverzeichnis ein, um den erforderlichen Elementwert zu finden , falls gefunden, break;

  • Ressourcen laden: Da der Namespace * ist, ist das Stammverzeichnis der Standortressource resources/lang, also ist das Unterverzeichnis zh_CN ; Der Gruppenname ist Validierung, dann werden alle Inhalte in der Datei resources/lang/zh_CN/validation.php in den Speicher geladen und gespeichert

    $namespace = '*', $group = 'validation', $item = 'accepted'

  • Holen Sie sich die Ressource und Ersetzen Sie die Parameter: Rufen Sie den Elementwert von

    über die Methode

    ab: Das Attribut muss akzeptiert werden. ;Zu diesem Zeitpunkt ist das Parameterarray nicht leer, führen Sie eine Schleifenersetzung durch und erhalten Sie das Ergebnis „Benutzername muss akzeptiert werden.“;
  • $this->loaded[$namespace][$group][$locale] = $lines;

  • Sprachen übersetzen ​​mit Namespaces Ressourcen

    Arr::get$this->loaded[$namespace][$group][$locale]

    Der Autor hat die Datei „vendor/Faker/Provider/zh_CN/Internet.php“ im Stammverzeichnis der Sprachressource „resource/lang“ mit folgendem Inhalt erstellt :

<?php
return [
 &#39;message&#39; => &#39;hello, Faker/Provider&#39;,
 ......
];
Registrieren Sie gleichzeitig manuell den Speicherort des Ressourcenstammverzeichnisses des Drittanbieter-Plug-Ins (d. h. mit Namespace) im Übersetzer;

app(&#39;translator&#39;)->addNamespace(&#39;Faker/Provider&#39;, base_path(&#39;vendor/xx/resource/lang&#39;))

Jetzt holen Sie sich die Namespace-Ressource

trans(&#39;Faker/Provider::Internet.message&#39;);

输出 'hello, Faker/Provider';

调用过程如下:

  • 解析键名:将键名进行解析成数组 ($namespace = 'Faker/Provider', $group = 'Internet', $item = 'message');

  • 获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;

  • 加载资源:因为命名空间为Faker/Provider,此时会分两步;第一步读取第三方插件资源库下的信息,这时读取命名空间注册的根目录为base_path('vendor/xx/resource/lang'),就读取base_path('vendor/xx/resource/lang')/zh_CN/Internet.php内容,文件不存在,返回空数组;第二步读取全局语言资源,进行补充,也就是读取base_path('resource/lang/vendor/Faker/Provider')/zh_CN/Internet.php; 最后进行保存 $this->loaded[$namespace][$group][$locale] = $lines;

  • 获取资源,并替换参数:通过Arr::get方法从$this->loaded[$namespace][$group][$locale]中获取元素值" hello, Faker/Provider";此时,参数数组为空,直接返回结果 "hello, Faker/Provider";

翻译Json文件中的资源

笔者在语言资源根目录resource/lang下,创建zh_CN.json文件,内容如下:

{
 "name": "zh_CN.json",
 "place": "../resources/lang/zh_CN.json"
}

现在,获取Json文件中的name值;

trans(&#39;*.name&#39;)

输出 "zh_CN.json";

调用过程如下:

  • 解析键名:将键名进行解析成数组 ($namespace = '*', $group = '*', $item = 'name');

  • 获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;

  • 加载资源:因为命名空间为*,且组也为*,这时会读取语言根目录下,名字为语言值的Json文件;此时会读取resource/lang/zh_CN.json,将读取的内容,进行保存 $this->loaded[$namespace][$group][$locale] = $lines;

  • 获取资源,并替换参数:通过Arr::get方法从$this->loaded[$namespace][$group][$locale]中获取元素值"zh_CN.json";此时,参数数组为空,直接返回结果 "zh_CN.json";

运行时绑定资源

资源的内容除了放在文件中,用到的时候在读取,也可以在项目运行时,存放;

以resources/lang/zh_CN/validation.php为例,现在想要在运行时,给这个组添加一个新的元素叫 extra,需要指定放在哪个语言下,可以这样写

app(&#39;translator&#39;)->addLines(array(&#39;validation.extra&#39; => &#39;测试添加额外数据&#39;), &#39;zh_CN&#39;);

现在可以获取这个新添加的元素值

trans(&#39;validation.extra&#39;)

复数资源过滤

笔者通过 运行时绑定资源 添加一条翻译内容:

app(&#39;translator&#39;)->addLines(array(&#39;validation.extra&#39; => &#39;{0}没有|[1,19]一些|[20,*]很多&#39;), &#39;zh_CN&#39;);

如果通过trans('validation.extra') ,获取的就是整条翻译内容,不是我们所期望的;用choice方法:

app('translator')->choice('validation.extra', 0) 得到 没有;

app('translator')->choice('validation.extra', 18) 得到 一些;

app('translator')->choice('validation.extra', 20) 得到 很多;

可以将app('translator')->choice(...)简写成全局帮助函数trans_choice(...);

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Laravel的View模块学习

Das obige ist der detaillierte Inhalt vonLernen des Laravel-Lokalisierungsmoduls. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn