搜尋
首頁後端開發php教程詳解Laravel的本地化模組

詳解Laravel的本地化模組

Jan 03, 2018 pm 03:50 PM
laravelphp學習教程

本文主要為大家介紹了Laravel學習教程之本地化模組的相關資料,文中透過範例程式碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。希望對大家有幫助。

前言

本文主要介紹給大家介紹了Laravel本地化模組的相關內容,分享出來供大家參考學習,話不多說了,來一起看看詳細的介紹吧。

本文是基於Laravel 5.4版本的本地化模組程式碼進行分析書寫;

模組組成




  • ##下圖展示了本地化模組各個檔案的關係,並進行簡要說明;

  • #TranslationServiceProvider
    在地化模組的服務提供者,既是一個模組的入口,也是與IOC容器互動的中心;註冊翻譯器實例translation.loader,註冊翻譯管理實例translator,並宣告延遲載入服務;

  • Translator
     翻譯管理類別;

  • MessageSelector
    訊息過濾器,透過判斷複數值來選擇適當的訊息;例如訊息內容是這樣的{0}沒有|[1,19]一些|[20,*]很多,我們傳的數字是18,那麼最後選擇的訊息就是"一些";

LoaderInterface

 翻譯器介面;宣告了三個方法load,addNamespace,namespaces;FileLoader
##  繼承了LoaderInterface,從檔案取得本地化資源資料;

ArrayLoader
# 繼承了LoaderInterface,在記憶體用陣列維護本地化資源資料;

設定說明

在config設定目錄下和本模組有關的參數只有app.php檔案中的locale和fallback_locale;

locale表示預設在地化語言是什麼,這樣會優先從該語言資源目錄中取得翻譯(轉換)內容;

如果locale表示的語言不存在,則使用fallback_locale這個備用語言;

筆者的locale是zh_CN,fallback_locale是en;

功能介紹

全域的語言資源目錄在專案的resources/lang下,每個子目錄分別以語言為名,例如en、zh_CN等;

另外一些子目錄是命名空間為名,是對第三方載入庫資源文件的補充替換;

有可能還存在en.json、zh_CN這類Json文件,項目有時候會從Json檔案讀取數據,這些數據都來自於這個已存在的Json檔案;

翻譯全域語言資源
  • 筆者的語言資源根目錄resources/ lang下有zh_CN/validation.php,內容如下

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

    透過呼叫程式碼
  • app(&#39;translator&#39;)->trans(&#39;validation.accepted&#39;, [&#39;attribute&#39; => &#39;用户名&#39;])
  • 或全域幫助函數trans

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

    輸出"使用者名稱必須接受。";
  • 呼叫過程如下:

  • 解析鍵名稱:將鍵名稱解析成陣列(

    $namespace = '*', $ group = 'validation', $item = 'accepted');namespace為*,表示在全域命名空間下;group,群組,其實就是檔案名,一個檔案為一組;item是元素的意思;
    取得語言數組: 這裡的$locale為null,所以回傳的是預設與備用語言組成的數組,也就是['zh_CN', 'en'];並進行for循環,進入語言資源目錄中尋找需要的元素值,如果找到,即break;

載入資源:因為命名空間為*,所以定位資源根目錄為resources/lang;語言是zh_CN,所以子目錄為zh_CN;group名為validation,這時就把resources/lang/zh_CN/validation.php檔案中的所有內容都載入進記憶體中,並進行儲存$this->loaded [$namespace][$group][$locale] = $lines;

#取得資源,並取代參數:透過

Arr::get

方法從

$this->loaded[$namespace][$group][$locale]

中取得元素值:attribute 必須接受。 ;此時,參數數組為不空,循環替換,得到結果"用戶名必須接受。";

翻譯帶命名空間的語言資源

############筆者在語言資源根目錄resource/lang下,建立vendor/Faker/Provider/zh_CN/Internet.php文件,內容如下:###
<?php
return [
 &#39;message&#39; => &#39;hello, Faker/Provider&#39;,
 ......
];
## #同時,手動在Translator中註冊第三方外掛程式(也就是帶有命名空間)的資源根目錄位置;###
app(&#39;translator&#39;)->addNamespace(&#39;Faker/Provider&#39;, base_path(&#39;vendor/xx/resource/lang&#39;))
###現在,取得命名空間的資源;###
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(...);

相关推荐:

laravel编写APP接口(API)

在laravel5里如何使用try catch?

Laravel 5.5的可相应接口如何使用?

以上是詳解Laravel的本地化模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具