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'}, '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
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
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/wovnrb/lang.rb', line 36 def self.get_code(lang_name) return nil if lang_name.nil? return lang_name if LANG[lang_name] 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
47 48 49 50 |
# File 'lib/wovnrb/lang.rb', line 47 def self.get_lang(lang) lang_code = get_code(lang) return LANG[lang_code] 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.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 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 |
# File 'lib/wovnrb/lang.rb', line 68 def add_lang_code(href, pattern, headers) return href if href =~ /^(#.*)?$/ # 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 == @lang_code.downcase new_href = href.sub(Regexp.new(@lang_code, 'i'), @lang_code.downcase) else new_href = href.sub(/(\/\/)([^\.]*)/, '\1' + @lang_code.downcase + '.' + '\2') end when 'query' new_href = href =~ /\?/ ? href + '&wovn=' + @lang_code : href + '?wovn=' + @lang_code else # path new_href = href.sub(/([^\.]*\.[^\/]*)(\/|$)/, '\1/' + @lang_code + '/') end end elsif href case pattern when 'subdomain' lang_url = headers.protocol + '://' + @lang_code.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=' + @lang_code : href + '?wovn=' + @lang_code else # path if href =~ /^\// new_href = '/' + @lang_code + href else current_dir = headers.pathname.sub(/[^\/]*\.[^\.]{2,6}$/, '') current_dir = '/' if current_dir == '' new_href = '/' + @lang_code + current_dir + href end end end new_href end |
#lang_code ⇒ Object
56 57 58 |
# File 'lib/wovnrb/lang.rb', line 56 def lang_code @lang_code end |
#switch_dom_lang(dom, store, values, url, headers) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/wovnrb/lang.rb', line 131 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'] = 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 |