我习惯用 jstl (+ apache standard taglib) 的<fmt:message> 做i18n
apache standard taglib 的做法是,若找不到该 key 对应的字串,
则在该key的前后加上 ??? ,然后输出
所以我的想法是,利用<fmt:message 把i18n后的字串存到 str 变量
然后在把str 变量内的 ??? 替换掉
步骤如下
jsp 内宣告 bundle
<fmt:setBundle basename="XXXXXXX" var="myBundle"/>
然后把原本<bean:message> 都改成
<fmt:message key="hello" var="myBundle"/>${fn:replace(myBundle,'???','')}
当然,若你会改standard taglib source的话,改一行就搞定
就可以用标准的 <fmt:message> taglib 来输出i18n了
※ 引述《no1kk (心中在下雨)》之铭言:
: 嗨,各位好
: 我是做前端的,但是因为各种理由我现在必须要修改jsp档案的内容
: 希望可以大家帮帮我...
: 在档案中会有这样的东西
: <bean:message key='hello'/>
: 我们是用于多语系的翻译之用,让页面上显示正确语系的文字
: 但由于前端、后端、翻译人员的工作并异步
: 因此若翻译人员 or 后端若尚未定义 hello 的翻译内容
: 则前端将会出现 error 500 的错误
: 所以我希望可以将这部分改成呼叫一个 function
: 若有 hello 的中文翻译,则传回 "哈囉",若无则传回原始字串
: 以免在没有资料时页面发生错误
: 以 javascript 来表示的话就像这样
: function translation(txt){
: if(typeof(msg[txt]) == 'string'){
: return msg[txt];
: }else{
: return txt;
: }
: }
: 感谢各位
: 补充一下目前的问题瓶颈
: 1. <bean:message key='hello'/> 这个值我要怎么在程式中取出来做判断
: 2. 我要怎么知道该值有没有被定义?
: 3. 输出在 html 之中,这部分我目前的理解应该是
: <%=translation('hello')%>
: 以上请多指教