前言

AnyMedia 自从 3.0.0 版本附带了多国语言包……
昨天也收到 Oberguru 翻译的德文版本……
当然……
除了主体文件实现多语言还不够……
包括安装、升级文档在内的部分也得相应提供多语言才行……
为了赶在 3.5.1 释出之前实现文档的多语言系统……
于是到处寻找 JavaScript 版本的多语言系统……
未果……
使用 xml + xsl 的倒是找到一个……
可惜对浏览器支持太差……
恼火……
于是乎自己硬头皮写了一套……
不多说……
记录如下:

目录:

主程式

数小时的成品……
未成体系……
望各位见谅……
(函式、变数的名称沿用 AnyMedia 的……
大伙儿要使用请自个儿改……)

var is_regexp = (window.RegExp) ? true : false; var anymedia = new Array; // 所支援的数组,键是语系简写,值是语言包名称 var langs = new Array; langs['de'] = 'German'; langs['en'] = 'English'; langs['zh-cn'] = 'Simplified_Chinese'; langs['zh'] = 'Traditional_Chinese'; // 语言选单 function langSelect() { document.write(' '); } // 获取语言的函式,如果未传值就根据浏览器语系选择 function getLang(lang) { if (lang && langs[lang]) { return langs[lang]; } else { if (navigator.userLanguage) { userLang = navigator.userLanguage.toLowerCase(); } else if (navigator.language) { userLang = navigator.language.toLowerCase(); } if (userLang && langs[userLang]) { createCookie('anymedialang', userLang, 365); return langs[userLang]; } else { createCookie('anymedialang', 'en', 365); return langs['en']; } } } // 获取短语,第一个参数必有,如果有多参数,则从第二个参数开始成为第一个参数的构成短语 function lang() { if (!arguments || arguments.length < 1 || !is_regexp) { return false; } else if (arguments.length == 1) { document.write(anymedia[arguments[0]]); } else if (arguments.length > 1) { var args = arguments; var str = anymedia[args[0]]; var re; for (var i = 1; i < args.length; i++) { re = new RegExp("%"+i+"\\$s", 'gi'); str = str.replace(re, anymedia[args[i]]); } document.write(str); } else { return false; } } // 构造短语,第一个参数必有,如果有多参数,则从第二个参数开始成为第一个参数的构成短语 function construct_phrase() { if (!arguments || arguments.length < 1 || !is_regexp) { return false; } var args = arguments; var str = anymedia[args[0]]; var re; for (var i = 1; i < args.length; i++) { re = new RegExp("%"+i+"\\$s", 'gi'); str = str.replace(re, anymedia[args[i]]); } return str; } // 生成链接,本来无甚必要,为了方便则添加了 function add_link(url, str) { document.write(''+anymedia[str]+''); } // 设置 Cookie 值 function createCookie(name, value, days) { if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toGMTString(); } else expires = ""; document.cookie = name + "=" + value + expires + "; path=/"; } // 读取 Cookie 值 function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } // 切换语言 function changeLang(name) { createCookie('anymedialang', name, 365); var url = new String(window.location); window.location = url; } // 读取语言文件 function loadLang(lang) { document.write(''); anymedia['language_id']=lang; }

目录:

语言包

以下是语言包文件示例:

anymedia['name'] = '沙滩凉鞋'; anymedia['i'] = '我'; anymedia['x_is_x'] = '%1$s是%2$s';

以上定义了三个短语……
如何使用?
请往下看……

目录:

使用方法

现在教你如何使用……

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

本例将输出一个语言选单,
还有一段短语 "我是沙滩凉鞋"。
当然啦,
加入你加入英文语言包就可以进行切换了……
我困了……
睡觉去了……

目录:

标签: none

添加新评论