【发布时间】:2013-06-18 09:36:19
【问题描述】:
我开发了一个 JavaScript 月历,所有的 HTML 都是由脚本动态生成的。
好处是,在包含 JS 和 CSS 文件之前,HTML 只需要一个容器:
<div id="calendar-box"></div>
脚本在其中附加了日历,这是一个带有 thead、tbody 和 tfoot 部分的表格。 p>
tbody 仅显示日期网格,因此无需本地化。
thead 和 tfoot 包含用于用户交互的对象(用于移动到上一个或下一个月/年的链接、工作日名称和关闭日历的链接)。
您可以想象,thead 和 tfoot 可能因本地化而异:在英语中,工作日是“Mo, Tu, We, Th, Fr, Sa, Su”,而在西班牙语中它们会是“Lu,马、米、菊、六、萨、做”。
月份名称也会出现同样的问题。
到目前为止,我使用 config 选项解决了这个问题,该选项定义了月份、工作日和其他模板部分的数组:
config = {
// other config stuff...
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
weekDayNames: ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],
closeText: 'Close' // text to display in the "close" button
};
但在我看来这不是最好的解决方案;我通常倾向于尽可能减少 JavaScript 中的 LOCALE。除此之外,thead 还包含很多 JavaScript 生成的 HTML,这也不太好。
我在similar questions 看到有人建议使用 JavaScript 模板插件:
var t = $.template('<div><img src="${url}" />${name}</div>');
但它仍然是 JS 生成的 HTML;在这种情况下,它作为template 方法的参数提供。
因此,我正在评估让脚本生成唯一的 tbody 部分,这是逻辑部分最有效的部分,并在页面中提供表格其余部分的静态 HTML 部分,如下所示:
<table class="calendar">
<thead>
<tr>
<td colspan="2"><a href="#">←</a></td>
<td colspan="3">
<div class="month">June</div><div class="year">2013</div>
</td>
<td colspan="2"><a href="#">⇆</a></td>
</tr>
<tr class="weekDays">
<td>Mo</td><td>Tu</td><td>We</td><td>Th</td><td>Fr</td><td>Sa</td><td>Su</td>
</tr>
</thead>
<tbody>
<!-- only this part is filled by JavaScript -->
</tbody>
<tfoot>
<tr><td colspan="7"><a href="#">Close</a></td></tr>
</tfoot>
</table>
这是一个混合解决方案,但允许通过服务器端模板管理 LOCALE。 您对此有何看法?
【问题讨论】:
标签: javascript html localization locale templating