【问题标题】:Translate Dates using Javascript?使用 Javascript 翻译日期?
【发布时间】:2011-02-12 03:06:55
【问题描述】:

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

  • 1 月 1 日
  • 2011 年 1 月 1 日

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

我已经听说过 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 时间戳的未来日期/时间。

【问题讨论】:

  • 我不明白问题是什么(它必须与您的最后一个问题有关,但我不明白如何)。您是在尝试输出日期,还是解析它们?格式是否总是相同(mmmm dd, yyyy)?
  • @Pekka - 例如,我可以这样做:if (English) { date('F j, Y');} else (FR) { date('j').' '.date('F').', '.date('Y') } 所以,我唯一的问题是翻译月份。此外,这是针对“即将发生的事件”,所以我不是试图回显当前日期/时间,而是带有 PHP 时间戳的未来日期/时间。
  • @Brian 啊,对不起,我看错了你的问题,删除了我的答案
  • 用PHP翻译不是更好吗?我看不出为什么这样的事情应该要求用户启用 JavaScript,并且 JS 没有任何使翻译文本更容易的本机类。 PHP 实际上有更多的原生字符串和日期操作函数/类。只需将月份名称的不同本地化存储在文本文件中,然后进行简单的字符串替换。
  • @Lèse majesté 你说得对。当谈到 PHP 时,我一无所知,无论我多么努力,我都无法弄清楚如何做到这一点。老实说,我是 PHP 的初学者,我认为这个特殊的任务已经超出了我的想象......

标签: javascript jquery datetime


【解决方案1】:

试试这个:

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;
}

【讨论】:

  • 此方案使用 PHP 而不是 JS
  • @carkod 当然,但问题确实在整个讨论 php 而不是 JS
【解决方案2】:

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

【讨论】:

  • 你能举一个使用它来处理本地化的例子吗?我认为使用维护良好的 FOSS 库是最佳解决方案,但我找不到有关此功能的任何实际文档(所有指向假定 i18n 或 L10n 文档的链接都是空白页)。添加示例将使您的答案更有用。
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多