js清空本地存储_[Flask]时间的本地化

翻译只是本地化的其中一个环节。

last_seen = db.Column(db.DateTime, default=datetime.utcnow) # 服务器存储 utc时间

1)原始(服务器存储)

0b2d558c352769946655d78996b947e4.png
{{ user.last_seen }}

2)由moment.js 按客户端时区格式化

第一步转换成客户端时区,比如数值上东8区要+8

(不直接用js,是通过封装后的flask-moment...)

b20dd60d4dc53048cff84ef1013e0429.png

{{ _('Last seen on') }}: {{ moment(user.last_seen).format('LLL') }}

第二步转换成客户端语言,比如August ->八月

(moment.js自带这个功能,只需要提供locale参数,而locale由flask_babel的get_locale()方法提供,依据是请求头accept-language的内容)

d8a9277010ca404433c9088f0a2a81a6.png
不过这里有个问题是,首先客户端时中文,但时间显示依然时英文的样式……

客户端请求换成西班牙语:

e169d95c4503c1b69b4330bcd6d7210d.png
(修改chrome请求头字段值,用的是chrome插件:Header Editor)

1214b95e00fa96dcfa3ff5267e03dc9f.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

这样好像就导致了flask_babel的get_locale识别到的locale,拿去给moment.js不能被识别……

以上现象,是由 Header Editor 测试得出:

e2f9c8e678bc7e6fc1c95d11e9434a0a.png

https://www.v2ex.com/t/88973

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值