gpt4 book ai didi

elixir - Phoenix 本地化

转载 作者:行者123 更新时间:2023-12-04 21:10:34 30 4
gpt4 key购买 nike

我正在使用 Phoenix 框架开发多语言应用程序

到目前为止,路由器看起来像这样:

scope "/:locale", App do
pipe_through [:browser, :browser_session]

get "/", PageController, :index

get "/otherpage", OtherpageController, :index
end

scope "/", App do

end

我使用了文档中的插件: http://www.phoenixframework.org/docs/understanding-plug#section-module-plugs

为了使“语言环境”在应用程序中保持不变,我使用 Phoenix.Controller 模块中的自定义操作来执行此操作:
def action(conn, _) do
apply(__MODULE__, action_name(conn), [conn,
conn.params,
conn.assigns.locale])
end

所以现在每次生成 Controller 时,我都应该添加上述自定义操作,并更改新 Controller 中的每个操作以注入(inject) 语言环境
def index(conn, _params, locale) do
list = Repo.all(List)

render conn, "index.html", list: list
end

我正在努力解决两件事:

1 - 这是正确的方法吗?或者我在搞砸什么?

2 - 以及如何制作 范围“/”被重定向到 范围“/:locale”默认值如下: "zh" ?

编辑

我喜欢这个网址:“example.com/en”

凯恩

最佳答案

我自己是 Phoenix 和 Elixir 的新手,但在我看来,Plug 将是您第二个问题的完美解决方案。使用 Plug 修改连接,例如重定向到 /:locale .描述了如何使用 Plugs 重定向 in the Phoenix documentation here .我复制了以下本地化插件部分的重定向:

defmodule HelloPhoenix.Plugs.Locale do
import Plug.Conn

@locales ["en", "fr", "de"]

def init(default), do: default

def call(%Plug.Conn{params: %{"locale" => loc}} = conn, _default) when loc in @locales do
assign(conn, :locale, loc)
end
def call(conn, default), do: assign(conn, :locale, default)
end

defmodule HelloPhoenix.Router do
use HelloPhoenix.Web, :router

pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
plug HelloPhoenix.Plugs.Locale, "en"
end

使用 Plug this blog article 进行重定向时也是一个简短而有用的资源。

我希望这会有所帮助!

关于elixir - Phoenix 本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35434548/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com