你肯定遇到过这种事儿。
公司好不容易接了个海外单子。
客户把合同传到你的档案系统里。
结果你一点开,全是乱码。
要么就是文件名全是问号。
老板在旁边盯着,脸都绿了。
这其实就是系统没做国际化。
很多人觉得这就只是翻译个界面。
其实根本不是那么回事。
这里面全是坑。
今天我就把这事儿给你掰扯清楚。
看完你就能直接去改系统。
保证以后啥语言的文件都能吃得住。
做国际化,第一步不是写代码。
是看你的数据库。
地基歪了,房子肯定塌。
以前老系统爱用GBK或者Latin1。
那时候主要是存中文。
现在要存法文、俄文、阿拉伯文。
这些编码根本装不下。
你必须把数据库字符集改成UTF-8。
而且是最新的那种,比如utf8mb4。
为什么要用mb4?
因为它能存表情符号。
现在老外发邮件也爱带个表情。
你存不进去,系统又得报错。
改的时候记得备份数据。
别一改库,老数据全丢了。
那就真成生产事故了。
中文排序习惯是按拼音。
英文是按字母A-Z。
德语还有些特殊字符。
如果你在数据库层面定了死规则。
那德国客户看列表就会觉得乱。
所以,排序最好放在代码层做。
数据库里就老老实实存数据。
别在数据库里瞎折腾排序。
给前端留点发挥空间。
数据存好了,该看界面了。
这是用户直接接触的地方。
最容易露怯。
很多程序员图省事。
直接在HTML里写“登录”、“提交”。
这要是改英文,得改多少地方?
而且容易漏。
正确的做法是建个语言包。
比如弄个zh-CN.json文件。
再弄个en-US.json文件。
代码里只写代号,比如login_btn。
系统根据用户设置自动去调对应的文字。
这叫“硬编码软着陆”。
以后要加个日语版。
只要翻译那个json文件就行。
代码都不用动。
中文意思很精炼。
两个字“删除”就行。
英文是Delete,也还行。
但德语可能是一长串。
如果你把按钮宽度定死了。
德文单词显示不全,最后变成“Dele...
用户看着多难受。
所以,界面布局别写死像素。

用百分比或者弹性布局。
让文字能撑开容器。
或者至少让文字能换行。
别把按钮做得太抠门。
大方向对了,细节也能要命。
这些不起眼的小地方最坑人。
中国人习惯年月日,2023-10-01。
美国人习惯月日年,10/01/2023。
这要是搞混了,合同生效日期就错了。
这在法律上可是大麻烦。
解决方法有两个。
要么用ISO标准,2023-10-01。
这个全世界都认。
要么就根据用户地区自动切换。
给用户个选择权。
千万别强制显示你习惯的格式。
咱们中国数字是每4位一撇。
老外是每3位一个逗号。
1,000,000和1,0000,看着都晕。
还有小数点。
有些国家是用逗号做小数点的。
1.5在他们眼里是一千五。
这要是算钱,差得可远了。
现在的编程语言都有现成的库。
直接调用本地化格式化函数。
别自己去拼接字符串。
很容易出错。
档案系统,核心是文件。
文件处理不好,系统白搭。
老外上传的文件名千奇百怪。
有空格,有特殊符号,甚至有表情。
有些服务器系统不支持这些字符。
存进去就报错,或者下载不了。
避坑提醒:千万别用原文件名存服务器。
自己生成一个唯一的ID当文件名。
比如一串乱码似的UUID。
把原始名字存数据库里。
用户下载时,再把名字改回去。
这样服务器最安全。
你在北京存文件。
时间是下午2点。
伦敦的客户看可能是早上6点。
纽约可能是半夜。
如果系统不显示时区。
客户根本不知道你啥时候传的。
数据库里统一存UTC时间。
也就是标准时间,不带时区。
展示的时候再转成当地时间。
这样无论你在哪,时间都是对的。
做国际化其实不难。
就是得细心。
别总站在自己的角度想问题。
多想想老外怎么用。
核心就三点。
第一,编码统一用UTF-8。
第二,界面别写死,要分离。
第三,日期数字用本地化库。
别等到客户跑了再改。
那时候成本就高了。
现在就去检查一下你的数据库。
看看是不是UTF-8。
不是的话,赶紧改。
这就叫行动力。