V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
dzdh
V2EX  ›  Go 编程语言

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

  •  
  •   dzdh · 2022-08-09 13:36:23 +08:00 · 2836 次点击
    这是一个创建于 873 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如 Almalinux 官网

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

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

    代码咋写呢?

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

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

    第 1 条附言  ·  2022-08-09 14:38:25 +08:00
    搭车再问。i18n 一般是咋实现。看了看现有的实现方案,觉得还是有点....

    有没有那种框架直接支持的. ctx 直接就有的那种 比如就 ctx.lang.get("name") 就行自带 lang 属性的那种框架。

    试了试 fiber 、echo 、gin 貌似都要自己实现?
    21 条回复    2022-08-10 13:55:51 +08:00
    wunonglin
        1
    wunonglin  
       2022-08-09 13:38:19 +08:00
    这不是页面的事?和 go 有啥关系,而且就算是 go ,随便一个 web 框架直接 /:lang/blog 不就可以获取得到了么
    momocraft
        2
    momocraft  
       2022-08-09 13:40:10 +08:00   ❤️ 1
    Next.js 自带一个 i18n path prefix
    但是你都用 go 了
    Trim21
        3
    Trim21  
       2022-08-09 13:42:39 +08:00 via Android
    随便找个理由用 group 功能做不就好了,针对每个语言创建一个 group 。
    Trim21
        4
    Trim21  
       2022-08-09 13:42:49 +08:00 via Android
    @Trim21 找个路由*
    wunonglin
        5
    wunonglin  
       2022-08-09 13:45:23 +08:00
    而且这种路由设计是比较适合页面是做 i18n 的,接口就不要这么设计比较好
    wangtian2020
        6
    wangtian2020  
       2022-08-09 14:04:11 +08:00
    路由匹配,nginx 做的事
    前端 vue-router 也能做
    crysislinux
        7
    crysislinux  
       2022-08-09 14:09:39 +08:00 via Android
    楼主是问这种一般怎么实现的。单纯 route params 不能处理没有 language 的情况。搞不好还真就是个正则,不满足预设的 language code 就认为是普通的 slug 。
    fzdwx
        8
    fzdwx  
       2022-08-09 14:09:52 +08:00
    有没有可能你说的 https://almalinux.org/zh-hans/blog/https://almalinux.org/blog 都只是前端的路由,而不涉及到后端的接口
    FanError
        9
    FanError  
       2022-08-09 14:17:52 +08:00
    曾经尝试用 springboot 实现(默认 springboot 是通过参数实现?lang=zh ),试了半天效果都不理想(同时支持 url 中有和没有的情况)。

    最后通过 nginx 重实现的。。网上有文章,楼主可以搜搜,实际转发给后端,还是转成参数在传递。
    dzdh
        10
    dzdh  
    OP
       2022-08-09 14:44:32 +08:00
    @crysislinux 对。现在已经在想直接写死了,因为真的实在是。。应该没有啥站点会支持全世界语言吧.
    dzdh
        11
    dzdh  
    OP
       2022-08-09 14:44:51 +08:00
    @FanError
    @wangtian2020

    hh 就是不想用 nginx
    gzf6
        12
    gzf6  
       2022-08-09 14:57:31 +08:00
    agagega
        13
    agagega  
       2022-08-09 14:59:25 +08:00 via iPhone
    静态网站把语言写死在 Path 里没啥问题,不过如果你要支持用户自己设置语言 /根据 Header 探测语言 /Cookie 设置语言的话就比较麻烦了
    bais
        14
    bais  
       2022-08-09 17:58:21 +08:00
    全局路由参数注册吧
    yrj
        15
    yrj  
       2022-08-09 19:30:05 +08:00
    貌似框架没有直接带的,一般官方示例都是 /api1/xxx /api2/xxx
    你直接这样定义路由试试( fiber )
    /:lang?/home..
    itskingname
        16
    itskingname  
       2022-08-09 21:31:07 +08:00
    谁告诉你 Almalinux 官方是个静态页面?
    vone
        17
    vone  
       2022-08-10 09:23:40 +08:00
    codehz
        19
    codehz  
       2022-08-10 10:17:29 +08:00
    https://github.com/AlmaLinux/almalinux.org/blob/master/almalinux/settings.py
    alma 就是单独做了个 locale 中间件,提前拦截处理了 url
    ysc3839
        20
    ysc3839  
       2022-08-10 12:11:50 +08:00
    我自己实现的话会检查一下 URL 中第一段是不是已知的语言标志,不是的话就根据 HTTP 头推测出用户语言然后加上去跳转。
    dzdh
        21
    dzdh  
    OP
       2022-08-10 13:55:51 +08:00
    @hailaz

    怎么注册路由实现 /a/b 和 /b 是同一个方法呢。定义两个路由吗?
    那不就成了 group("/zh-cn").get('/b', handle) group("/").get('/b',handle) 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2177 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:10 · PVG 00:10 · LAX 08:10 · JFK 11:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.