作者no1kk (心中在下雨)
看板java
标题Re: [问题] 新手的一个小问题,求解
时间Fri Sep 14 11:40:18 2018
※ 引述《kogrs (kogrs)》之铭言:
: 我习惯用 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,'???','')}
抱歉,上面这部分我看不太懂
XXXXXX表示什麽?
所以我是在原本 <bean:message> 的位置要放什麽才会正确显示?
: 当然,若你会改standard taglib source的话,改一行就搞定
: 就可以用标准的 <fmt:message> taglib 来输出i18n了
最後我再补充一下
由於有些文字是在 javascript 会被使用到的
所以就会有一个这样的js程式区块
来将资讯传递到 js
<script>
window.msg['hello'] = "<bean:message key='hello'/>";
window.msg['try.again'] = "<bean:message key='try.again'/>";
window.msg['login.fail'] = "<bean:message key='login.fail'/>";
.
.
.
</script>
然後只要有新增翻译文字
就必须要在这里也同样加入对应的文字
这个动作有办法简化(or程式化)吗?
因为有些翻译只是新的server回应代码,是不需要动到 javascript 的部分
如 user.action.1 / user.action.2 / .........etc
: ※ 引述《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')%>
: : 以上请多指教
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.120.155.60
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1536896420.A.789.html
1F:→ jej: 嗯 jstl在jsp用的很广泛 建议翻一翻喔 09/14 12:15
2F:推 swpoker: 传json就好啊 09/15 14:18