使用Javascript翻译日期?

时间:2011-02-12 03:06:55

标签: javascript jquery datetime

我有一个超出预算的项目,我正在努力找到最快的解决方案。基本上,我有一个多语言网站,用英语输出以下格式的日期:

  • Jan 01
  • 2011年1月1日

显然每个月有12个选项,但我只需要翻译几个月,而不是一周中的几天或几天。此外,由于我最初是从PHP回显这些日期,因此生成的HTML是100%可预测的,只有24个可能的返回值 - 1月,2月,3月为12,1月,2月,3月为12 ......等等。

我已经被告知PHP strotime()setlocale()。我知道它可能有些笨拙,但是有没有办法只需要将正在吐出的PHP字符串转换出来并在事后使用jQuery直接翻译它们。我要做的是将脚本包装在检查if (ICL_LANGUAGE_CODE == 'fr') {}

的PHP条件中

如果有一种非常简单的方法可以通过PHP实现这一点我对此持开放态度,但到目前为止,我已收到社区的回复,但它们太费时并且在很多情况下未考虑其他变量我为简洁起见,我不在这里解释。

另外,为了清楚起见,我会说我使用的是jQuery,它已经加载到网站上。

修改

我并不关心这个的日期语法,例如,我可以这样做:if (English) { date('F j, Y');} else (FR) { date('j').' '.date('F').', '.date('Y') }所以,我唯一的问题是翻译月份名称。此外,这是针对“即将发生的事件”,所以我不是要回应当前的日期/时间,而是将来的一个PHP时间戳。

2 个答案:

答案 0 :(得分:3)

试试这个:

mons.txt内部:

EN, Jan, Feb, Mar, Apr, May, June, July, Aug, Sept, Oct, Nov, Dec
FR, janv, fevr, mars, avril, mai, juin, juil, aout, sept, oct, nov, dec
DE, Jan, Feb, Marz, Apr, Mai, Juni, Juli, Aug, Sept, Okt, Nov, Dez
IT, genn, febbr, mar, apr, magg, giugno, luglio, ag, sett, ott, nov, dic
ES, enero, feb, marzo, abr, mayo, jun, jul, agosto, set, oct, nov, dic
NL, Jan, Feb, Mar, Apr, Mei, Juni, Juli, Aug, Sept, Oct, Nov, Dec

在months.txt内部:

EN, January, February, March, April, May, June, July, August, September, October, November, December
FR, janvier, fevrier, mars, avril, mai, juin, juillet, aout, septembre, octobre, novembre, decembre
DE, Januar, Februar, Marz, April, Mai, Juni, Juli, August, September, Oktober, November, Dezember
IT, gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre, novembre, dicembre
ES, enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre
NL, Januari, Februari, Maart, April, Mei, Juni, Juli, Augustus, September, Oktober, November, December

days.txt内部:

EN, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
FR, lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche
DE, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag
IT, lunedi, martedi, mercoledi, giovedi, venerdi, sabato, domenica
ES, lunes, martes, miercoles, jueves, viernes, sabado, domingo
NL, Maandag, Dinsdag, Woensdag, Donderdag, Vrijdag, Zaterdag, Zondag

翻译:

$date = date('l, M n, Y', strtotime('December 13th, 2012'));
$date = translate($date, 'IT');
var_dump($date);

function tmap($maps = array()) {
  $tmap = array();
  $defaultMaps = array('mons', 'months', 'ordinals', 'days', 'formats');
  $maps += $defaultMaps;
  foreach ($maps as $map) {
    $mapfile = "$map.txt";
    if (file_exists($mapfile)) {
      $file = file($mapfile);
      foreach ($file as $line) {
        $translations = str_getcsv($line);
        $locale = array_shift($translations);
        $tmap[$map][$locale] = $translations;
      }
    }
  }
  return $tmap;
}

function translate($string, $to, $classes=array(), $base='EN', $tmap=array()) {
  if (empty($tmap)) $tmap = tmap();
  if (is_string($classes)) $classes = array($classes);
  if (empty($classes)) {
    $classes = array_keys($tmap);
  }
  foreach ($classes as $class) {
    $string = str_ireplace($tmap[$class][$base], $tmap[$class][$to], $string);
  }
  return $string;
}

答案 1 :(得分:2)

要解析或显示,请尝试http://code.google.com/p/datejs/ 处理本地化并具有多种类型的配置设置。