languager 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.travis.yml +3 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +33 -0
- data/LICENSE.txt +20 -0
- data/README.md +41 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/languager.gemspec +66 -0
- data/lib/languager.rb +6 -0
- data/lib/languager/string.rb +43 -0
- data/lib/languager/subs.rb +109 -0
- data/test/helper.rb +18 -0
- data/test/test_languager.rb +74 -0
- metadata +117 -0
data/.document
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "shoulda", ">= 0"
|
10
|
+
gem "rdoc", "~> 3.12"
|
11
|
+
gem "bundler", "~> 1.1.0"
|
12
|
+
gem "jeweler", "~> 1.8.3"
|
13
|
+
gem "simplecov", ">= 0"
|
14
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
git (1.2.5)
|
5
|
+
jeweler (1.8.3)
|
6
|
+
bundler (~> 1.0)
|
7
|
+
git (>= 1.2.5)
|
8
|
+
rake
|
9
|
+
rdoc
|
10
|
+
json (1.6.6)
|
11
|
+
multi_json (1.2.0)
|
12
|
+
rake (0.9.2.2)
|
13
|
+
rdoc (3.12)
|
14
|
+
json (~> 1.4)
|
15
|
+
shoulda (3.0.1)
|
16
|
+
shoulda-context (~> 1.0.0)
|
17
|
+
shoulda-matchers (~> 1.0.0)
|
18
|
+
shoulda-context (1.0.0)
|
19
|
+
shoulda-matchers (1.0.0)
|
20
|
+
simplecov (0.6.1)
|
21
|
+
multi_json (~> 1.0)
|
22
|
+
simplecov-html (~> 0.5.3)
|
23
|
+
simplecov-html (0.5.3)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
bundler (~> 1.1.0)
|
30
|
+
jeweler (~> 1.8.3)
|
31
|
+
rdoc (~> 3.12)
|
32
|
+
shoulda
|
33
|
+
simplecov
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2012 Alexandr Borisov
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Introduction
|
2
|
+
|
3
|
+
Languager extends string to translate it to specified language by keyboard layout (like Punto Switcher). Currently supporting only translation from english to russian. It will be useful to autocorrect user's input in wrong keyboard layout in search queries.
|
4
|
+
|
5
|
+
This document describes installation and usage of languager.
|
6
|
+
|
7
|
+
Please report issues on [Github](https://github.com/aishek/languager/issues).
|
8
|
+
|
9
|
+
For feedback, suggestions, etc. write to <aishek@gmail.com>.
|
10
|
+
|
11
|
+
[![Build Status](https://secure.travis-ci.org/aishek/languager.png)](http://travis-ci.org/aishek/languager)
|
12
|
+
|
13
|
+
# Installation
|
14
|
+
|
15
|
+
To install:
|
16
|
+
|
17
|
+
gem install languager
|
18
|
+
|
19
|
+
or with a Gemfile:
|
20
|
+
|
21
|
+
gem 'languager'
|
22
|
+
bundle install
|
23
|
+
|
24
|
+
# Usage
|
25
|
+
|
26
|
+
Usage in Ruby program:
|
27
|
+
|
28
|
+
require 'languager'
|
29
|
+
|
30
|
+
query = "ghbdtn^ vbh!"
|
31
|
+
query.to_ru # 'привет, мир!'
|
32
|
+
|
33
|
+
# Documentation
|
34
|
+
|
35
|
+
The [RubyDoc documentation](http://rubydoc.info/github/aishek/languager/master/frames) is available online.
|
36
|
+
|
37
|
+
# Copyright
|
38
|
+
|
39
|
+
Copyright (c) 2012 Alexandr Borisov. See LICENSE.txt for
|
40
|
+
further details.
|
41
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
gem.name = "languager"
|
17
|
+
gem.homepage = "http://github.com/aishek/languager"
|
18
|
+
gem.license = "MIT"
|
19
|
+
gem.summary = %Q{Translate string to given language by keyboard layout}
|
20
|
+
gem.description = %Q{Translate string to given language by keyboard layout. Useful to auto convert user input from wrong language to target languages in search queries}
|
21
|
+
gem.email = "aishek@gmail.com"
|
22
|
+
gem.authors = ["Alexandr Borisov"]
|
23
|
+
gem.platform = Gem::Platform::RUBY
|
24
|
+
gem.required_ruby_version = '>= 1.9.2'
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/test_*.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
task :default => :test
|
36
|
+
|
37
|
+
require 'rdoc/task'
|
38
|
+
Rake::RDocTask.new do |rdoc|
|
39
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
|
+
|
41
|
+
rdoc.rdoc_dir = 'rdoc'
|
42
|
+
rdoc.title = "languager #{version}"
|
43
|
+
rdoc.rdoc_files.include('README*')
|
44
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/languager.gemspec
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{languager}
|
8
|
+
s.version = "0.0.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = [%q{Alexandr Borisov}]
|
12
|
+
s.date = %q{2012-04-09}
|
13
|
+
s.description = %q{Translate string to given language by keyboard layout. Useful to auto convert user input from wrong language to target languages in search queries}
|
14
|
+
s.email = %q{aishek@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".travis.yml",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"languager.gemspec",
|
29
|
+
"lib/languager.rb",
|
30
|
+
"lib/languager/string.rb",
|
31
|
+
"lib/languager/subs.rb",
|
32
|
+
"test/helper.rb",
|
33
|
+
"test/test_languager.rb"
|
34
|
+
]
|
35
|
+
s.homepage = %q{http://github.com/aishek/languager}
|
36
|
+
s.licenses = [%q{MIT}]
|
37
|
+
s.require_paths = [%q{lib}]
|
38
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
|
39
|
+
s.rubygems_version = %q{1.8.8}
|
40
|
+
s.summary = %q{Translate string to given language by keyboard layout}
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
s.specification_version = 3
|
44
|
+
|
45
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
47
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
48
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.1.0"])
|
49
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
|
50
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
53
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
54
|
+
s.add_dependency(%q<bundler>, ["~> 1.1.0"])
|
55
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
56
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
57
|
+
end
|
58
|
+
else
|
59
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
60
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
61
|
+
s.add_dependency(%q<bundler>, ["~> 1.1.0"])
|
62
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
63
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
data/lib/languager.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Languager::String
|
2
|
+
include Languager::Subs
|
3
|
+
|
4
|
+
# Translates string to russian language by keyboard layout rules (like Punto Switcher), returning nil if no translations were made.
|
5
|
+
def to_ru
|
6
|
+
to_language :ru
|
7
|
+
end
|
8
|
+
|
9
|
+
# Changing the contents of string to russian language by keyboard layout rules (like Punto Switcher), returning nil if no changes were made.
|
10
|
+
def to_ru!
|
11
|
+
to_language! :ru
|
12
|
+
end
|
13
|
+
|
14
|
+
# Translates string to specified language by keyboard layout rules (like Punto Switcher), returning nil if no translations were made.
|
15
|
+
# @param [Symbol] name language to translate to
|
16
|
+
# @return [String] translated by keyboard layout string to specified language, nil if translation fails
|
17
|
+
def to_language(name)
|
18
|
+
result = ""
|
19
|
+
|
20
|
+
source = SUBS[name]
|
21
|
+
return nil if source.nil?
|
22
|
+
|
23
|
+
self.each_char do |c|
|
24
|
+
sub = source[c]
|
25
|
+
return nil if sub.nil?
|
26
|
+
|
27
|
+
result << sub
|
28
|
+
end
|
29
|
+
|
30
|
+
result
|
31
|
+
end
|
32
|
+
alias_method :to_lang, :to_language
|
33
|
+
|
34
|
+
# Changing the contents of string to specified language by keyboard layout rules (like Punto Switcher), returning nil if no changes were made.
|
35
|
+
# @param [Symbol] name language to translate to
|
36
|
+
# @return [String] translated by keyboard layout string to specified language, nil if translation fails
|
37
|
+
def to_language!(name = :ru)
|
38
|
+
result = to_language name
|
39
|
+
result.nil? ? nil : replace(result)
|
40
|
+
end
|
41
|
+
alias_method :to_lang!, :to_language!
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Languager::Subs
|
4
|
+
SUBS = {
|
5
|
+
:ru => {
|
6
|
+
'q' => 'й',
|
7
|
+
'w' => 'ц',
|
8
|
+
'e' => 'у',
|
9
|
+
'r' => 'к',
|
10
|
+
't' => 'е',
|
11
|
+
'y' => 'н',
|
12
|
+
'u' => 'г',
|
13
|
+
'i' => 'ш',
|
14
|
+
'o' => 'щ',
|
15
|
+
'p' => 'з',
|
16
|
+
'[' => 'х',
|
17
|
+
']' => 'ъ',
|
18
|
+
'a' => 'ф',
|
19
|
+
's' => 'ы',
|
20
|
+
'd' => 'в',
|
21
|
+
'f' => 'а',
|
22
|
+
'g' => 'п',
|
23
|
+
'h' => 'р',
|
24
|
+
'j' => 'о',
|
25
|
+
'k' => 'л',
|
26
|
+
'l' => 'д',
|
27
|
+
';' => 'ж',
|
28
|
+
'\'' => 'э',
|
29
|
+
'\\' => 'ё',
|
30
|
+
'z' => 'я',
|
31
|
+
'x' => 'ч',
|
32
|
+
'c' => 'с',
|
33
|
+
'v' => 'м',
|
34
|
+
'b' => 'и',
|
35
|
+
'n' => 'т',
|
36
|
+
'm' => 'ь',
|
37
|
+
',' => 'б',
|
38
|
+
'.' => 'ю',
|
39
|
+
|
40
|
+
'Q' => 'Й',
|
41
|
+
'W' => 'Ц',
|
42
|
+
'E' => 'У',
|
43
|
+
'R' => 'К',
|
44
|
+
'T' => 'Е',
|
45
|
+
'Y' => 'Н',
|
46
|
+
'U' => 'Г',
|
47
|
+
'I' => 'Ш',
|
48
|
+
'O' => 'Щ',
|
49
|
+
'P' => 'З',
|
50
|
+
'{' => 'Х',
|
51
|
+
'}' => 'Ъ',
|
52
|
+
'A' => 'Ф',
|
53
|
+
'S' => 'Ы',
|
54
|
+
'D' => 'В',
|
55
|
+
'F' => 'А',
|
56
|
+
'G' => 'П',
|
57
|
+
'H' => 'Р',
|
58
|
+
'J' => 'О',
|
59
|
+
'K' => 'Л',
|
60
|
+
'L' => 'Д',
|
61
|
+
':' => 'Ж',
|
62
|
+
'"' => 'Э',
|
63
|
+
'|' => 'Ё',
|
64
|
+
'Z' => 'Я',
|
65
|
+
'X' => 'Ч',
|
66
|
+
'C' => 'С',
|
67
|
+
'V' => 'М',
|
68
|
+
'B' => 'И',
|
69
|
+
'N' => 'Т',
|
70
|
+
'M' => 'Ь',
|
71
|
+
'<' => 'Б',
|
72
|
+
'>' => 'Ю',
|
73
|
+
|
74
|
+
'§' => '>',
|
75
|
+
'1' => '1',
|
76
|
+
'2' => '2',
|
77
|
+
'3' => '3',
|
78
|
+
'4' => '4',
|
79
|
+
'5' => '5',
|
80
|
+
'6' => '6',
|
81
|
+
'7' => '7',
|
82
|
+
'8' => '8',
|
83
|
+
'9' => '9',
|
84
|
+
'0' => '0',
|
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
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
require 'languager'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'helper'
|
4
|
+
require 'languager'
|
5
|
+
|
6
|
+
class TestLanguager < Test::Unit::TestCase
|
7
|
+
def test_mixed_chars_to_ru
|
8
|
+
input = "ghbdtn^ vbh!"
|
9
|
+
assert_equal "привет, мир!", input.to_ru
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_to_ru_new
|
13
|
+
input = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
14
|
+
assert_equal 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ', input.to_ru
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_to_ru_modify
|
18
|
+
input = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
19
|
+
input.to_ru!
|
20
|
+
assert_equal 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ', input
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_to_ru_new_nil
|
24
|
+
input = 'qуwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
25
|
+
assert_nil input.to_ru
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_to_ru_modify_nil
|
29
|
+
input = 'qуwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
30
|
+
assert_nil input.to_ru!
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_return_new_string_in_russian_from_english
|
34
|
+
input = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
35
|
+
assert_equal 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ', input.to_language(:ru)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_return_nil_on_some_non_english_char
|
39
|
+
input = 'qуwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
40
|
+
assert_nil input.to_language(:ru)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_return_new_string_in_russian_from_english_by_shorthand
|
44
|
+
input = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
45
|
+
assert_equal 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ', input.to_lang(:ru)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_return_nil_on_some_non_english_char_by_short_hand
|
49
|
+
input = 'qуwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
50
|
+
assert_nil input.to_lang(:ru)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_return_nil_on_some_non_english_char_by_modify
|
54
|
+
input = 'qуwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
55
|
+
assert_nil input.to_language!(:ru)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_return_nil_on_some_non_english_char_by_modify_shorthand
|
59
|
+
input = 'qуwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
60
|
+
assert_nil input.to_lang!(:ru)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_modify_string_in_russian_from_english
|
64
|
+
input = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
65
|
+
input.to_language!(:ru)
|
66
|
+
assert_equal 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ', input
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_modify_string_in_russian_from_english_by_shorthand
|
70
|
+
input = 'qwertyuiop[]asdfghjkl;\'\\zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>'
|
71
|
+
input.to_lang!(:ru)
|
72
|
+
assert_equal 'йцукенгшщзхъфывапролджэёячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЁЯЧСМИТЬБЮ', input
|
73
|
+
end
|
74
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: languager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Alexandr Borisov
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-09 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: shoulda
|
16
|
+
requirement: &2151771880 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2151771880
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rdoc
|
27
|
+
requirement: &2151770480 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.12'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2151770480
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: bundler
|
38
|
+
requirement: &2151769100 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.1.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2151769100
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: jeweler
|
49
|
+
requirement: &2151768120 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.8.3
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2151768120
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: simplecov
|
60
|
+
requirement: &2151766880 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2151766880
|
69
|
+
description: Translate string to given language by keyboard layout. Useful to auto
|
70
|
+
convert user input from wrong language to target languages in search queries
|
71
|
+
email: aishek@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files:
|
75
|
+
- LICENSE.txt
|
76
|
+
- README.md
|
77
|
+
files:
|
78
|
+
- .document
|
79
|
+
- .travis.yml
|
80
|
+
- Gemfile
|
81
|
+
- Gemfile.lock
|
82
|
+
- LICENSE.txt
|
83
|
+
- README.md
|
84
|
+
- Rakefile
|
85
|
+
- VERSION
|
86
|
+
- languager.gemspec
|
87
|
+
- lib/languager.rb
|
88
|
+
- lib/languager/string.rb
|
89
|
+
- lib/languager/subs.rb
|
90
|
+
- test/helper.rb
|
91
|
+
- test/test_languager.rb
|
92
|
+
homepage: http://github.com/aishek/languager
|
93
|
+
licenses:
|
94
|
+
- MIT
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 1.9.2
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 1.8.8
|
114
|
+
signing_key:
|
115
|
+
specification_version: 3
|
116
|
+
summary: Translate string to given language by keyboard layout
|
117
|
+
test_files: []
|