truonghan you should be able to switch language by simply copying stuff around in the widget folder. Locate your locale folder (xx.lproj) and overwrite the similar named files in the widget root. But please make take backup before you start hacking around 
Personally I would like to select myself which language I'm using in widgets and in software in general. So I started to think more elegant and programming orientated solution for this problem and came up with a little code snippet. Be warned - it has not been tested throughout.
Code:
function languageChanged(){
startWidget();
}
function loadLangPack(locale){
switch(locale) {
case "fi":
replaceScript("localizedStrings.js","fi.lproj/localizedStrings.js", languageChanged);
break;
case "fr":
replaceScript("localizedStrings.js","fr.lproj/localizedStrings.js",languageChanged);
break;
case "default":
replaceScript("localizedStrings.js","localizedStrings.js",languageChanged);
}
}
function replaceScript(filename, newfile, onloadComplete){
var scripts = document.getElementsByTagName("script");
var script;
//search & destroy
for(var i=0; i< scripts.length; i++){
if(scripts[i].src.indexOf(filename) != -1 ){
script = scripts[i];
for (var property in script) {
delete script[property];
}
script.parentNode.replaceChild(createCodeTag(newfile, onloadComplete), script);
break;
}
}
}
function createCodeTag(src, callback){
var head = document.getElementsByTagName('head');
var scriptElement = document.createElement('script');
scriptElement.type = "text/javascript";
scriptElement.onload = callback;
scriptElement.src = src;
return scriptElement;
}
Basically with this you can implement localization in the standard way and still provide the possibility to switch the language.
(note that this does only cover translated string values)
-Ilkka