Class: Wovnrb::Lang
- Inherits:
-
Object
- Object
- Wovnrb::Lang
- Defined in:
- lib/wovnrb/lang.rb
Constant Summary collapse
- LANG =
{ #http://msdn.microsoft.com/en-us/library/hh456380.aspx 'ar' => {name: 'العربية', code: 'ar', en: 'Arabic'}, 'bg' => {name: 'Български', code: 'bg', en: 'Bulgarian'}, 'zh-CHS' => {name: '简体中文', code: 'zh-CHS', en: 'Simp Chinese'}, 'zh-CHT' => {name: '繁體中文', code: 'zh-CHT', en: 'Trad Chinese'}, 'da' => {name: 'Dansk', code: 'da', en: 'Danish'}, 'nl' => {name: 'Nederlands', code: 'nl', en: 'Dutch'}, 'en' => {name: 'English', code: 'en', en: 'English'}, 'fi' => {name: 'Suomi', code: 'fi', en: 'Finnish'}, 'fr' => {name: 'Français', code: 'fr', en: 'French'}, 'de' => {name: 'Deutsch', code: 'de', en: 'German'}, 'el' => {name: 'Ελληνικά', code: 'el', en: 'Greek'}, 'he' => {name: 'עברית', code: 'he', en: 'Hebrew'}, 'id' => {name: 'Bahasa Indonesia', code: 'id', en: 'Indonesian'}, 'it' => {name: 'Italiano', code: 'it', en: 'Italian'}, 'ja' => {name: '日本語', code: 'ja', en: 'Japanese'}, 'ko' => {name: '한국어', code: 'ko', en: 'Korean'}, 'ms' => {name: 'Bahasa Melayu', code: 'ms', en: 'Malay'}, 'my' => { name: 'ဗမာစာ', code: 'my', en: 'Burmese' }, 'ne' => {name: 'नेपाली भाषा', code: 'ne', en: 'Nepali'}, 'no' => {name: 'Norsk', code: 'no', en: 'Norwegian'}, 'pl' => {name: 'Polski', code: 'pl', en: 'Polish'}, 'pt' => {name: 'Português', code: 'pt', en: 'Portuguese'}, 'ru' => {name: 'Русский', code: 'ru', en: 'Russian'}, 'es' => {name: 'Español', code: 'es', en: 'Spanish'}, 'sv' => {name: 'Svensk', code: 'sv', en: 'Swedish'}, 'th' => {name: 'ภาษาไทย', code: 'th', en: 'Thai'}, 'hi' => {name: 'हिन्दी', code: 'hi', en: 'Hindi'}, 'tr' => {name: 'Türkçe', code: 'tr', en: 'Turkish'}, 'uk' => {name: 'Українська', code: 'uk', en: 'Ukrainian'}, 'vi' => {name: 'Tiếng Việt', code: 'vi', en: 'Vietnamese'}, }
Class Method Summary collapse
- .get_code(lang_name) ⇒ Object
- .get_lang(lang) ⇒ Object
-
.iso_639_1_normalization(lang_code) ⇒ String
Provides the ISO639-1 code for a given lang code.
Instance Method Summary collapse
-
#add_lang_code(href, pattern, headers) ⇒ String
Adds language code to URL in “href” variable by “pattern” variable and own @lang_code.
-
#initialize(lang_name) ⇒ Lang
constructor
A new instance of Lang.
- #lang_code ⇒ Object
- #switch_dom_lang(dom, store, values, url, headers) ⇒ Object
Constructor Details
Class Method Details
.get_code(lang_name) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/wovnrb/lang.rb', line 48 def self.get_code(lang_name) return nil if lang_name.nil? return lang_name if LANG[lang_name] custom_lang_aliases = Store.instance.settings['custom_lang_aliases'] custom_lang = LANG[custom_lang_aliases.invert[lang_name]] return custom_lang[:code] if custom_lang LANG.each do |k, l| if lang_name.downcase == l[:name].downcase || lang_name.downcase == l[:en].downcase || lang_name.downcase == l[:code].downcase return l[:code] end end return nil end |
.get_lang(lang) ⇒ Object
62 63 64 65 |
# File 'lib/wovnrb/lang.rb', line 62 def self.get_lang(lang) lang_code = get_code(lang) return LANG[lang_code] end |
.iso_639_1_normalization(lang_code) ⇒ String
Provides the ISO639-1 code for a given lang code. Source: support.google.com/webmasters/answer/189077?hl=en
44 45 46 |
# File 'lib/wovnrb/lang.rb', line 44 def self.iso_639_1_normalization(lang_code) return lang_code.sub(/zh-CHT/i, 'zh-Hant').sub(/zh-CHS/i, 'zh-Hans') end |
Instance Method Details
#add_lang_code(href, pattern, headers) ⇒ String
Adds language code to URL in “href” variable by “pattern” variable and own @lang_code.
When @lang_code is 'ja', add_lang_code('https://wovn.io', 'path', headers) returns 'https://wovn.io/ja/'.
If you want to know more examples, see also test/lib/lang_test.rb.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/wovnrb/lang.rb', line 83 def add_lang_code(href, pattern, headers) return href if href =~ /^(#.*)?$/ code_to_add = Store.instance.settings['custom_lang_aliases'][@lang_code] || @lang_code # absolute links new_href = href if href && href =~ /^(https?:)?\/\//i # in the future, perhaps validate url rather than using begin rescue # "#{url =~ /\// ? 'http:' : ''}#{url}" =~ URI::regexp begin uri = URI(href) rescue return new_href end # only add lang if it's an internal link # DNS names are case insensitive if uri.host.downcase === headers.host.downcase case pattern when 'subdomain' sub_d = href.match(/\/\/([^\.]*)\./)[1] sub_code = Lang.get_code(sub_d) if sub_code && sub_code.downcase == code_to_add.downcase new_href = href.sub(Regexp.new(code_to_add, 'i'), code_to_add.downcase) else new_href = href.sub(/(\/\/)([^\.]*)/, '\1' + code_to_add.downcase + '.' + '\2') end when 'query' new_href = href =~ /\?/ ? href + '&wovn=' + code_to_add : href + '?wovn=' + code_to_add else # path new_href = href.sub(/([^\.]*\.[^\/]*)(\/|$)/, '\1/' + code_to_add + '/') end end elsif href case pattern when 'subdomain' lang_url = headers.protocol + '://' + code_to_add.downcase + '.' + headers.host current_dir = headers.pathname.sub(/[^\/]*\.[^\.]{2,6}$/, '') if href =~ /^\.\..*$/ # ../path new_href = lang_url + '/' + href.gsub(/^\.\.\//, '') elsif href =~ /^\..*$/ # ./path new_href = lang_url + current_dir + '/' + href.gsub(/^\.\//, '') elsif href =~ /^\/.*$/ # /path new_href = lang_url + href else # path new_href = lang_url + current_dir + '/' + href end when 'query' new_href = href =~ /\?/ ? href + '&wovn=' + code_to_add : href + '?wovn=' + code_to_add else # path if href =~ /^\// new_href = '/' + code_to_add + href else current_dir = headers.pathname.sub(/[^\/]*\.[^\.]{2,6}$/, '') current_dir = '/' if current_dir == '' new_href = '/' + code_to_add + current_dir + href end end end new_href end |
#lang_code ⇒ Object
71 72 73 |
# File 'lib/wovnrb/lang.rb', line 71 def lang_code @lang_code end |
#switch_dom_lang(dom, store, values, url, headers) ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/wovnrb/lang.rb', line 147 def switch_dom_lang(dom, store, values, url, headers) replace_dom_values(dom, values, store, url, headers) # INSERT LANGUAGE METALINKS parent_node = dom.at_css('head') || dom.at_css('body') || dom.at_css('html') published_langs = get_langs(values) published_langs.each do |l| insert_node = Nokogiri::XML::Node.new('link', dom) insert_node['rel'] = 'alternate' insert_node['hreflang'] = Lang::iso_639_1_normalization(l) insert_node['href'] = headers.redirect_location(l) parent_node.add_child(insert_node) end # set lang property on HTML tag if dom.at_css('html') || dom.at_css('HTML') (dom.at_css('html') || dom.at_css('HTML')).set_attribute('lang', @lang_code) end dom.to_html.gsub(/href="([^"]*)"/) { |m| "href=\"#{URI.decode($1)}\"" } end |