Golang Go语言中 有哪个框架能简单实现或怎么不使用框架实现在 URL 中传递“语言”

发布于 1周前 作者 h691938207 来自 Go语言

如 Almalinux 官网

传,中文 https://almalinux.org/zh-hans/blog/

不传,那就是默认英文 https://almalinux.org/blog

代码咋写呢?

不管 almalinux 咋实现的,他可能就是个静态页但是咋动态实现。

匹配路由 /zh/blog 和 /blog 。 只有是 zh|en|zh-CN|en-US 就算是语言参数,赋给 context ,不然就当作普通业务 path 匹配?


Golang Go语言中 有哪个框架能简单实现或怎么不使用框架实现在 URL 中传递“语言”

更多关于Golang Go语言中 有哪个框架能简单实现或怎么不使用框架实现在 URL 中传递“语言”的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

22 回复

这不是页面的事?和 go 有啥关系,而且就算是 go ,随便一个 web 框架直接 /:lang/blog 不就可以获取得到了么

更多关于Golang Go语言中 有哪个框架能简单实现或怎么不使用框架实现在 URL 中传递“语言”的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Next.js 自带一个 i18n path prefix
但是你都用 go 了

随便找个理由用 group 功能做不就好了,针对每个语言创建一个 group 。

找个路由*

而且这种路由设计是比较适合页面是做 i18n 的,接口就不要这么设计比较好

路由匹配,nginx 做的事
前端 vue-router 也能做

楼主是问这种一般怎么实现的。单纯 route params 不能处理没有 language 的情况。搞不好还真就是个正则,不满足预设的 language code 就认为是普通的 slug 。

有没有可能你说的 https://almalinux.org/zh-hans/blog/https://almalinux.org/blog 都只是前端的路由,而不涉及到后端的接口

曾经尝试用 springboot 实现(默认 springboot 是通过参数实现?lang=zh ),试了半天效果都不理想(同时支持 url 中有和没有的情况)。

最后通过 nginx 重实现的。。网上有文章,楼主可以搜搜,实际转发给后端,还是转成参数在传递。

对。现在已经在想直接写死了,因为真的实在是。。应该没有啥站点会支持全世界语言吧.




hh 就是不想用 nginx

静态网站把语言写死在 Path 里没啥问题,不过如果你要支持用户自己设置语言 /根据 Header 探测语言 /Cookie 设置语言的话就比较麻烦了

全局路由参数注册吧

貌似框架没有直接带的,一般官方示例都是 /api1/xxx /api2/xxx
你直接这样定义路由试试( fiber )
/:lang?/home…

谁告诉你 Almalinux 官方是个静态页面?

https://github.com/AlmaLinux/almalinux.org/blob/master/almalinux/settings.py
alma 就是单独做了个 locale 中间件,提前拦截处理了 url

我自己实现的话会检查一下 URL 中第一段是不是已知的语言标志,不是的话就根据 HTTP 头推测出用户语言然后加上去跳转。



怎么注册路由实现 /a/b 和 /b 是同一个方法呢。定义两个路由吗?
那不就成了 group("/zh-cn").get(’/b’, handle) group("/").get(’/b’,handle) 了

在Golang中,实现URL中传递“语言”参数并不依赖于特定的框架,而是可以通过标准库net/url轻松完成。以下是不使用框架实现该功能的简要说明:

  1. 添加参数到URL

    • 使用url.Values类型来表示URL参数。
    • 使用AddSet方法来添加或设置参数。
    • 使用Encode方法生成URL编码的查询字符串,并将其添加到基本URL的末尾。
  2. 示例代码

    package main
    
    import (
        "fmt"
        "net/url"
    )
    
    func main() {
        params := url.Values{}
        params.Add("language", "zh-CN") // 添加语言参数
        queryString := params.Encode()
        baseUrl := "http://example.com"
        fullUrl := baseUrl + "?" + queryString
        fmt.Println(fullUrl) // 输出:http://example.com?language=zh-CN
    }
    
  3. URL转义

    • 使用url.QueryEscape对特殊字符进行转义。
    • 使用url.QueryUnescape对转义后的URL进行解码。

通过上述方法,你可以在不依赖任何框架的情况下,轻松地在Golang的URL中传递“语言”参数。同时,Golang的标准库提供了强大的工具来处理URL,使得这一过程变得简单且高效。

回到顶部