【问题标题】:Reading language from source从源代码读取语言
【发布时间】:2011-06-29 02:49:56
【问题描述】:

我想在多语言(en、ru、lt)网站中使用灯箱,所以我需要翻译灯箱。 要为灯箱设置正确的参数,我需要阅读语言巫婆的定义:

    <body>
        <div id="main">

    <div id="logo"> 
        <a href="/en/" ...

因此,如果我使用另一种语言,则徽标链接将是该语言代码。我有这个 .js 代码:

$(function() {
    $('.object').lightBox({
        txtOf: 'translation',
        txtImage: 'another_translation'
    });
});

我应该如何更改 JS 来进行检查?

【问题讨论】:

  • “检查”是什么意思?

标签: javascript jquery html if-statement


【解决方案1】:
$(function() {
    // Define language map
    var languageMap = {
      en: {txtOf: 'Something', txtImage: 'This is an image'},
      ru: {txtOf: 'что-то', txtImage: 'его является изображение'}
    };
    // Detect language from the logo images href attribute
    var re = new RegExp('/([^/]*)/*');
    var href = $('#logo a').eq(0).attr('href');
    var lang = 'en'; //English by default
    var match = re.exec(href);
    if (match !== null) {
        lang = match[1];
    }
    // initialize lightBox
    $('.object').lightBox({
        txtOf: languageMap[lang].txtOf,
        txtImage: languageMap[lang].txtImage
    });
})

请参阅http://jsfiddle.net/ArtBIT/JzPZP/ 以获取实时示例。

另外http://jsfiddle.net/ArtBIT/JzPZP/1 会给你看俄文版

【讨论】:

  • 你能解释一下这行吗? var re = new RegExp('/([^/]*)/*');
  • @JackLeo 当然,这是一个正则表达式,用于查找和匹配以/ 开头、具有一个或多个非/ 字符并以另一个/ 结尾的任何内容(尾随星号是错字)
  • @JackLeo 星号表示“最后一个字符,重复零次或多次”,即ba* 将匹配babaaabaaaaa,但也匹配b,因为它是''零次或多次
  • @JackLeo 您可以在括号中指定一个字符集,如 [a-zA-Z0-9] 这将匹配来自 az 的任何字母、任何大写字母 AZ 或任何数字 0-9,如果您在括号后添加一个星号,它将匹配属于该集合的具有零个或多个字母的任何单词。如果字符集以^ 字符开头,则表示“除以下字符外的任何字符”。所以[^+-] 的意思是,匹配除加号和减号之外的任何字符。
  • @JackLeo 常规大括号() 意味着,抓住并记住它们里面的东西。所以,最后,/([^/]*)/ 文学意味着,找到并记住我一个字符串,该字符串在 / 字符之后开始,具有除/ 之外的多个字符,并在另一个 / 字符之前结束。因此,如果您有一个类似“/en/images/logo.jpg”的链接,它将匹配单词“en”和“images”,但我们只对第一个匹配感兴趣,因此lang = match[1];。如果您对正则表达式不熟悉,请查看regular-expressions.info/javascript.html
【解决方案2】:

我修改了 lightbox.js 的 get control 和它的选项:

//(function () {
//    var $, Lightbox, LightboxOptions;
//    $ = jQuery;
    var Lightbox, LightboxOptions;
    LightboxOptions = (function () {
        [...]
    })();

    Lightbox = (function () {
        [...]
    })();
//    $(function () {
//        var lightbox, options;
//        options = new LightboxOptions;
//        return lightbox = new Lightbox(options);
//    });
//}).call(this);

另一方面,我必须在我想要画廊的每个页面中调用一个小代码 sn-p,而不仅仅是在头部添加 de 库:

$(function () {
    var lightbox, options;
    options = new LightboxOptions;
    return lightbox = new Lightbox(options);
});

但现在,我可以通过编程方式更改灯箱选项,而无需进行额外更改: ASP.net:

$(function () {
    var lightbox, options;
    options = new LightboxOptions;
    options.labelImage = '<%=this.GetLocalResourceObject("Lightbox.options.labelImage").ToString() %>';
    options.labelOf = '<%=this.GetLocalResourceObject("Lightbox.options.labelOf").ToString() %>';
    return lightbox = new Lightbox(options);
});

PHP:

$(function () {
    var lightbox, options;
    options = new LightboxOptions;
    options.labelImage = '<?php echo $dictionary["Lightbox_options_labelOf"]; ?>';
    options.labelOf = '<?php echo $dictionary["Lightbox.options.labelOf"]; ?>';
    return lightbox = new Lightbox(options);
});

【讨论】:

    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    相关资源
    最近更新 更多