翻译只是本地化的其中一个环节。
last_seen = db.Column(db.DateTime, default=datetime.utcnow) # 服务器存储 utc时间
1)原始(服务器存储)
![0b2d558c352769946655d78996b947e4.png](https://i-blog.csdnimg.cn/blog_migrate/1ba9c4d1fa0f1cdfc6c13325cdf10432.png)
2)由moment.js 按客户端时区格式化
第一步转换成客户端时区,比如数值上东8区要+8
(不直接用js,是通过封装后的flask-moment...)
![b20dd60d4dc53048cff84ef1013e0429.png](https://i-blog.csdnimg.cn/blog_migrate/3fd030ac7112476473d3f859149c297b.png)
{{ _('Last seen on') }}: {{ moment(user.last_seen).format('LLL') }}
第二步转换成客户端语言,比如August ->八月
(moment.js自带这个功能,只需要提供locale参数,而locale由flask_babel的get_locale()方法提供,依据是请求头accept-language的内容)
![d8a9277010ca404433c9088f0a2a81a6.png](https://i-blog.csdnimg.cn/blog_migrate/46ce71969300409fbb4f020390ac9d5b.png)
客户端请求换成西班牙语:
![e169d95c4503c1b69b4330bcd6d7210d.png](https://i-blog.csdnimg.cn/blog_migrate/7ef22714e0801ed74299fdd3bab6fe46.png)
![1214b95e00fa96dcfa3ff5267e03dc9f.png](https://i-blog.csdnimg.cn/blog_migrate/10217277d46e96ba23920ee5274b9eb7.png)
def get_locale():
return request.accept_languages.best_match(app.config['LANGUAGES'])
g.locale =str(get_locale())
{{ moment.lang(g.locale) }}
[问题]为什么中文会失败?(解决了很久)
原因是,中文代号有很多,各个库没有完全支持又没有统一标准便于衔接
zh
zh-CN
zh-Hans-CN
对于flask_babel,get_locale的结果只认zh和zh-Hans-CN,如果zh-CN要生效需,请求头必须是zh-CN,zh而不是单纯的zh-CN(?)
而对于moment.js,{{ moment.lang(g.locale) }} 只认识zh_CN,其他都不行
{{ moment.lang('zh_CN') }} # 这是手动
![9e94071a6aa3cf47e8ea8c3e88235a8c.png](https://i-blog.csdnimg.cn/blog_migrate/9d77f11f1040099a43347e649e7fc369.png)
这样好像就导致了flask_babel的get_locale识别到的locale,拿去给moment.js不能被识别……
以上现象,是由 Header Editor 测试得出:
![e2f9c8e678bc7e6fc1c95d11e9434a0a.png](https://i-blog.csdnimg.cn/blog_migrate/614b699a255e7ff9accdb0a2d21adf96.jpeg)
https://www.v2ex.com/t/88973