国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman多語言組件嚴重BUG

aphper

translation 是共享的單例 只要一個用戶使用 locale() 函數(shù) 切換了語言,將導致整個網(wǎng)站的用戶都切換了語言

想要切換語言 只能每次輸出的時候 trans('hello', [], null, 'en'); 指定語言

而在FPM模式下,每次請求設(shè)定locale,設(shè)定locale后每次trans都使用locale設(shè)定的語言 下次請求需要讀取用戶設(shè)置的語言再次locale。locale本質(zhì)上對單次請求有效,通過把用戶個性化設(shè)置的語言儲存在數(shù)據(jù)庫或者cookie,可以達到locale對單個用戶有效的效果,比如網(wǎng)站默認提供英文,用戶可以自定義英文 日文,而且這個設(shè)定只對這個用戶自己有效

而webman中由于共享了一個單例 通過locale設(shè)定語言后 對整個網(wǎng)站都生效,一個用戶設(shè)置了英文 整個網(wǎng)站的所有用戶都會看到英文,想要達到fpm模式的切換語言業(yè)務(wù)效果 只能在每次調(diào)用trans函數(shù)時再設(shè)定一次語言

這顯然屬于是一個BUG而不是webman獨有的特性

2820 3 0
3個回答

ersic

用戶語言放到 session 里呢,簡單封裝一下

  • aphper 2022-05-10

    思路差不多 不過你這個方案有點問題

  • aphper 2022-05-10

    新用戶第一次進來還沒設(shè)定語言時,展示的語言是最后一個訪問的用戶設(shè)定的語言

  • aphper 2022-05-10

    還是得整個全局中間件,每次請求開始都重置成config中的默認語言,這個最好是群主能在框架中處理好

  • ersic 2022-05-10

    沒設(shè)定語言session沒值,讀的是配置里的默認語言。

  • aphper 2022-05-10

    那你不是每隔頁面都要locale一下

  • 魯達 2022-05-10

    只能每次請求都要設(shè)置下語言,因為單例的話是針對每個worker進程的

  • 魯達 2022-05-10

    walkor大神也沒必要處理,文檔說明清楚就好了

  • ersic 2022-05-10

    沒辦法,這個類提前注入的,只能這樣處理,比每次都new也快著呢。

  • aphper 2022-05-10

    是的想了組件確實沒必要改 不過框架中每次請求重置語言為默認還是有必要的

liziyu

用session + 中間件來做可以的!

  • aphper 2022-05-10

    是的 可以自己處理

  • aphper 2022-05-10

    最好是框架處理下 不處理也可以在文檔中注明一下 ,畢竟和大部分框架包括其他常駐內(nèi)存框架使用的方法有差別 容易被慣性思維誤導

walkor 打賞

這個編程時注意下就行了。webman里單例是長生命周期,所有請求共享。
用中間件處理是推薦做法,這個樣可以為每個請求設(shè)置明確的語言。

手冊加了說明
https://workerman.net/doc/webman/components/translation.html#%E4%B8%BA%E6%AF%8F%E4%B8%AA%E8%AF%B7%E6%B1%82%E6%98%8E%E7%A1%AE%E7%9A%84%E8%AE%BE%E7%BD%AE%E8%AF%AD%E8%A8%80

年代過于久遠,無法發(fā)表回答
??