Re: [問題] 新手的一個小問題,求解
※ 引述《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://www.ptt.cc/bbs/java/M.1536896420.A.789.html
→
09/14 12:15,
6年前
, 1F
09/14 12:15, 1F
推
09/15 14:18,
6年前
, 2F
09/15 14:18, 2F
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章