termclock 0.5.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d89ea6ed7b04bc61235e7500823b8c29783025115a0366cbf805152a079506a
4
- data.tar.gz: 4c8f02442b4e972ea784061e9b320ca7fdfe668d55f4b8a94723527c96365dbf
3
+ metadata.gz: f115886b901413b9482b73b07620040e5c331d66379f99770f479cedbd27b2e8
4
+ data.tar.gz: ed396757fec5da45e436efc98680dfcbea6f20ed2bbd5ae00be655617a35d5fc
5
5
  SHA512:
6
- metadata.gz: cb2fc8a8b36a1961a4ab914295d1cb920e03499129065d2a66a0a4f3e3e28f3705ef9eedc21b3a35c7a81cb60af58dc67c26a03dd26643ab7bec3f2953472a60
7
- data.tar.gz: fa2b54e5ad66ee0dd3e118e41bfba397edf209e5a4b5a5961c353cd8351237837b61f2e98c0cb0cbe9d5574716577839631b344f5d8eef0fb64a8bb7e9b21138
6
+ metadata.gz: 4c8fcee590146c6ae39192da7e979a71bc67619a82173ab4076451da1e99268c89fd5fc93fb663f99263fd1bc9a2405179b36a9f416367fd5ca917fa95f4e46f
7
+ data.tar.gz: 768021fa1a46138689cd0b737ef1c05c5cba5f6d7a087bd28aa45f803724457a400b36129c27486fcda10f9bb7d970230177ef986759dbb60d46e30a529c32e7
data/exe/termclock CHANGED
@@ -150,8 +150,8 @@ begin
150
150
  )
151
151
  rescue Interrupt, SignalException
152
152
  print "\e[H\e[2J\e[3J"
153
- # rescue Errno::ENOTTY
154
- # abort "This should be run on a TTY! Also please don't pipe or redirect the output!"
153
+ rescue Errno::ENOTTY
154
+ abort "This should be run on a TTY! Also please don't pipe or redirect the output!"
155
155
  ensure
156
156
  print "\e[?25h"
157
157
  end
data/lib/termclock.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'linux_stat'
2
2
  require 'io/console'
3
+ require 'json'
4
+
3
5
  require_relative "termclock/version"
6
+ require_relative "termclock/center_puts"
4
7
 
5
8
  module Termclock
6
9
  GC_COMPACT_TIME = 7200
@@ -11,8 +14,63 @@ module Termclock
11
14
  TAB = ?\t.freeze
12
15
  EMPTY = ''.freeze
13
16
  EPSILON = 5.0e-07
17
+
18
+ # All languages
19
+ LANGS = %i(
20
+ bn en es fr hi it ru
21
+ )
22
+
23
+ # LANGUAGES
24
+ env_lc_all = ENV['LC_ALL'] && !ENV['LC_ALL'].empty? && ENV['LC_ALL'].downcase.split(?_)[0].to_sym
25
+
26
+ _lang = nil
27
+ _lang = env_lc_all if LANGS.include?(env_lc_all)
28
+
29
+ unless _lang
30
+ env_language = ENV['LANGUAGE'] && !ENV['LANGUAGE'].empty? && ENV['LANGUAGE'].downcase.split(?_)[0].to_sym
31
+ _lang = env_language if LANGS.include?(env_language)
32
+ end
33
+
34
+ unless _lang
35
+ env_lang = ENV['LANG'] && !ENV['LANG'].empty? && ENV['LANG'].downcase.split(?_)[0].to_sym
36
+ _lang = env_lang if LANGS.include?(env_lang)
37
+ end
38
+
39
+ unless _lang
40
+ _lang = :en
41
+ end
42
+
43
+ LANG = _lang.freeze
44
+
45
+ # Load translations
46
+ TRANSLATION_FILES = {}
47
+
48
+ Dir.glob(File.join(__dir__, 'translations', '*.json')).each { |x|
49
+ next if x == '..'.freeze || x == ?..freeze || !File.readable?(x)
50
+
51
+ TRANSLATION_FILES.merge!(
52
+ File.basename(x).split(?..freeze).tap(&:pop).join(?..freeze) => x
53
+ )
54
+ }
55
+
56
+ translation_file = TRANSLATION_FILES[LANG.to_s]
57
+
58
+ TRANSLATIONS = if translation_file && File.readable?(translation_file)
59
+ begin
60
+ JSON.parse(IO.read(translation_file))
61
+ rescue StandardError
62
+ center_puts "Can't Parse Translation File!"
63
+ sleep 0.5
64
+ {}
65
+ end
66
+ else
67
+ {}
68
+ end
14
69
  end
15
70
 
71
+ # Translation engine
72
+ require_relative 'termclock/translate.rb'
73
+
16
74
  require_relative "termclock/string"
17
75
  require_relative "termclock/parse_characters"
18
76
  require_relative "termclock/system_info"
@@ -0,0 +1,8 @@
1
+ module Termclock
2
+ def self.center_puts(message)
3
+ winsize = STDOUT.winsize
4
+
5
+ puts "\e[2J\e[H\e[3J\e[#{winsize[0] / 2}H"\
6
+ "#{?\s.*(winsize[1] / 2 - message.bytesize / 2)}#{message}"
7
+ end
8
+ end
@@ -79,17 +79,23 @@ module Termclock
79
79
 
80
80
  case Time.now.hour
81
81
  when 5...12
82
- "\u{1F304} #{braille_0} Good Morning #{braille_0} \u{1F304}"
82
+ _m = translate('Good Morning')
83
+ "\u{1F304} #{braille_0} #{_m} #{braille_0} \u{1F304}"
83
84
  when 12...16
84
- "\u26C5 #{braille_0} Good Afternoon #{braille_0} \u26C5"
85
+ _m = translate('Good Afternoon')
86
+ "\u26C5 #{braille_0} #{_m} #{braille_0} \u26C5"
85
87
  when 16...18
86
- "\u{1F307} #{braille_0} Good Evening #{braille_0} \u{1F307}"
88
+ _m = translate('Good Evening')
89
+ "\u{1F307} #{braille_0} #{_m} #{braille_0} \u{1F307}"
87
90
  when 18...20
88
- "\u{1F31F} #{braille_0} Good Evening #{braille_0} \u{1F31F}"
91
+ _m = translate('Good Evening')
92
+ "\u{1F31F} #{braille_0} #{_m} #{braille_0} \u{1F31F}"
89
93
  when 20...24
90
- "\u{1F303} #{braille_0} Good Night #{braille_0} \u{1F303}"
94
+ _m = translate('Good Night')
95
+ "\u{1F303} #{braille_0} #{_m} #{braille_0} \u{1F303}"
91
96
  else
92
- "\u{2728} #{braille_0} Good Night #{braille_0} \u{2728}"
97
+ _m = translate('Good Night')
98
+ "\u{2728} #{braille_0} #{_m} #{braille_0} \u{2728}"
93
99
  end
94
100
  }
95
101
 
@@ -143,7 +149,9 @@ module Termclock
143
149
  chop_message += 1
144
150
  message_counter -= 1
145
151
  message_align -= 1
146
- message.replace(message_temp[chop_message..-1])
152
+
153
+ _chopped = message_temp[chop_message..-1]
154
+ message.replace(_chopped) if _chopped
147
155
  end
148
156
  else
149
157
  chop_message = 0 unless chop_message == 0
@@ -159,7 +167,7 @@ module Termclock
159
167
  end
160
168
  end
161
169
 
162
- message_final = (message).rjust(message_align).gradient(
170
+ message_final = message.rjust(message_align).gradient(
163
171
  tc1, tc2, exclude_spaces: true, bold: bold, italic: italic
164
172
  )
165
173
  end
@@ -167,7 +175,18 @@ module Termclock
167
175
  info = system_info(width, tc1, tc2, bold, italic) if print_info
168
176
 
169
177
  if print_date
170
- date = time_now.strftime(date_format).center(width)
178
+ _date = time_now.strftime(date_format)
179
+
180
+ unless LANG == :en
181
+ _date = _date.split(/(\W)/).map { |x|
182
+ translate(
183
+ x,
184
+ breakword: !x[/[^0-9]/]
185
+ )
186
+ }.join
187
+ end
188
+
189
+ date = _date.center(width)
171
190
  .gradient(tc1, tc2, bold: bold, italic: italic, exclude_spaces: true)
172
191
  end
173
192
 
@@ -106,4 +106,8 @@ class String
106
106
 
107
107
  temp
108
108
  end
109
+
110
+ def camelize!
111
+ replace(split(SPACE).map(&:capitalize).join(SPACE))
112
+ end
109
113
  end
@@ -1,14 +1,17 @@
1
1
  module Termclock
2
- FILESYSTEM = if LS::FS.stat('/')[:blocks].to_i == 0
3
- ?.
2
+ FILESYSTEM, FILESYSTEM_LABEL = if LS::FS.stat('/')[:blocks].to_i == 0
3
+ _pwd = Dir.pwd
4
+ pwd = _pwd.length > 8 ? _pwd[0..5] + '...' : _pwd
5
+ [?..freeze, pwd]
4
6
  else
5
- ?/
7
+ [?/.freeze, ?/.freeze]
6
8
  end.freeze
7
9
 
8
10
  @@cpu_usage = 0
9
11
  @@cpu_usage_t = Thread.new { }.join
10
12
 
11
- @@current_net_usage = "\u{1F4CA} Curr. DL/UL:"
13
+ _tr = translate('Curr. DL/UL')
14
+ @@current_net_usage = "\u{1F4CA} #{_tr}:"
12
15
  @@current_net_usage_t = Thread.new { }.join
13
16
 
14
17
  class << self
@@ -16,9 +19,7 @@ module Termclock
16
19
  unless @@cpu_usage_t.alive?
17
20
  @@cpu_usage_t = Thread.new {
18
21
  _cpu_usage = LS::CPU.usage(0.25)
19
- _cpu_usage_i = _cpu_usage.to_i
20
-
21
- @@cpu_usage = "%0.2f" % _cpu_usage
22
+ @@cpu_usage = _cpu_usage ? "%0.2f".freeze % _cpu_usage : nil
22
23
  }
23
24
  end
24
25
 
@@ -26,14 +27,27 @@ module Termclock
26
27
  @@current_net_usage_t = Thread.new do
27
28
  _m = LS::Net.current_usage(0.25)
28
29
 
29
- _dl = LS::PrettifyBytes.convert_short_decimal(_m[:received])
30
- _ul = LS::PrettifyBytes.convert_short_decimal(_m[:transmitted])
30
+ _dl = _m[:received]
31
+ _ul = _m[:transmitted]
32
+
33
+ @@current_net_usage = if _dl && _ul
34
+ _tr = translate('Curr. DL/UL')
35
+ dl = LS::PrettifyBytes.convert_short_decimal(_dl)
36
+ ul = LS::PrettifyBytes.convert_short_decimal(_ul)
31
37
 
32
- @@current_net_usage = "\u{1F4CA} Curr. DL/UL: #{"%-9s" % _dl} | #{ "%9s" % _ul}"
38
+ "\u{1F4CA} #{_tr}: #{t!("%-9s" % dl)} | #{t!("%9s" % ul)}"
39
+ else
40
+ EMPTY
41
+ end
33
42
  end
34
43
  end
35
44
 
36
- cpu = "\u{1F9E0} CPU: #{"%6s" % @@cpu_usage}% (#{LS::CPU.count_online}/#{LS::CPU.count})"
45
+ cpu = if @@cpu_usage
46
+ _tr = translate('CPU')
47
+ "\u{1F9E0} #{_tr}: #{t!("%6s" % @@cpu_usage)}% (#{t!(LS::CPU.count_online)}/#{t!(LS::CPU.count)})"
48
+ else
49
+ EMPTY
50
+ end
37
51
 
38
52
  battery = if LS::Battery.present?
39
53
  stat = LS::Battery.stat
@@ -47,48 +61,68 @@ module Termclock
47
61
 
48
62
  lives = "\u2665 ".freeze.*(charge.fdiv(20).ceil).chop
49
63
 
50
- "#{emoji} Battery: #{charge}% #{lives} (#{plug}#{stat[:status]})"
64
+ _tr = translate('Battery')
65
+ "#{emoji} #{_tr}: #{t!(charge)}% #{lives} (#{plug}#{translate(stat[:status])})"
51
66
  else
52
67
  EMPTY
53
68
  end
54
69
 
55
- user = "\u{1F481} User: #{LS::User.get_current_user.capitalize}"
56
- hostname = "\u{1F4BB} Hostname: #{LS::OS.hostname}"
70
+ _tr = translate('User')
71
+ user = "\u{1F481} #{_tr}: #{LS::User.get_current_user.capitalize}"
72
+
73
+ _tr = translate('Hostname')
74
+ hostname = "\u{1F4BB} #{_tr}: #{LS::OS.hostname}"
57
75
 
76
+ _tr = translate('IP Addr')
58
77
  _m = LS::Net.total_bytes
59
- ip = "\u{1F30F} IP Addr: #{LS::Net.ipv4_private}"
78
+ ip = "\u{1F30F} #{_tr}: #{translate(LS::Net.ipv4_private, b: true)}"
79
+
80
+ _received = _m[:received]
81
+ _transmitted = _m[:transmitted]
82
+
83
+ _tr = translate('Totl. DL/UL')
84
+ tot_received = _received ? "\u{1F4C8} #{_tr}: #{t!('%-9s'.freeze % LS::PrettifyBytes.convert_short_decimal(_m[:received]))}" : nil
85
+ tot_transmitted = _transmitted ? " | #{t!('%9s'.freeze % LS::PrettifyBytes.convert_short_decimal(_transmitted))}" : nil
60
86
 
61
- net_usage = "\u{1F4C8} Totl. DL/UL: #{"%-9s" % LS::PrettifyBytes.convert_short_decimal(_m[:received])}"\
62
- " | #{"%9s" % LS::PrettifyBytes.convert_short_decimal(_m[:transmitted])}"
87
+ net_usage = if tot_received && tot_transmitted
88
+ tot_received + tot_transmitted
89
+ else
90
+ EMPTY
91
+ end
63
92
 
64
93
  _m = LS::Memory.stat
65
94
  _m.default = 0
66
95
 
67
- memory = "\u{1F3B0} Mem: #{LS::PrettifyBytes.convert_short_decimal(_m[:used] * 1000)}"\
68
- " / #{LS::PrettifyBytes.convert_short_decimal(_m[:total] * 1000)}"\
69
- " (#{"%.2f" % _m[:percent_used]}%)"
96
+ _tr = translate('Mem')
97
+ memory = "\u{1F3B0} #{_tr}: #{t!(LS::PrettifyBytes.convert_short_decimal(_m[:used] * 1000))}"\
98
+ " / #{t!(LS::PrettifyBytes.convert_short_decimal(_m[:total] * 1000))}"\
99
+ " (#{t!("%.2f" % _m[:percent_used])}%)"
70
100
 
71
101
  _m = LS::Swap.stat
72
102
  _m.default = 0
73
103
 
74
- swap = "\u{1F300} Swap: #{LS::PrettifyBytes.convert_short_decimal(_m[:used] * 1000)}"\
75
- " / #{LS::PrettifyBytes.convert_short_decimal(_m[:total] * 1000)}"\
76
- " (#{"%.2f" % _m[:percent_used]}%)"
104
+ _tr = translate('Swap')
105
+ swap = "\u{1F300} #{_tr}: #{t!(LS::PrettifyBytes.convert_short_decimal(_m[:used] * 1000))}"\
106
+ " / #{t!(LS::PrettifyBytes.convert_short_decimal(_m[:total] * 1000))}"\
107
+ " (#{t!("%.2f" % _m[:percent_used])}%)"
77
108
 
78
109
  _m = LS::Filesystem.stat(FILESYSTEM)
79
110
  _m.default = 0
80
111
 
81
- fs = "\u{1F4BD} FS: #{LS::PrettifyBytes.convert_short_decimal(_m[:used])}"\
82
- " / #{LS::PrettifyBytes.convert_short_decimal(_m[:total])}"\
83
- " (#{"%.2f" % _m[:used].*(100).fdiv(_m[:total]).round(2)}%)"
112
+ _tr = translate('FS')
113
+ fs = "\u{1F4BD} #{_tr} (#{FILESYSTEM_LABEL}): #{t!(LS::PrettifyBytes.convert_short_decimal(_m[:used]))}"\
114
+ " / #{t!(LS::PrettifyBytes.convert_short_decimal(_m[:total]))}"\
115
+ " (#{t!("%.2f" % _m[:used].*(100).fdiv(_m[:total]).round(2))}%)"
84
116
 
85
117
  pt = LS::Process.types.values
86
118
 
87
119
  process = if pt.length > 0
88
- "\u{1F3ED} Process: T:#{"%4s" % pt.length}|"\
89
- "R:#{"%3s" % pt.count(:running)}|"\
90
- "S:#{"%3s" % pt.count(:sleeping)}|"\
91
- "I:#{"%3s" % pt.count(:idle)}"
120
+ _tr = translate('Process')
121
+
122
+ "\u{1F3ED} #{_tr}: T:#{t!("%4s" % pt.length)}|"\
123
+ "R:#{"%3s" % t!(pt.count(:running))}|"\
124
+ "S:#{"%3s" % t!(pt.count(:sleeping))}|"\
125
+ "I:#{"%3s" % t!(pt.count(:idle))}"
92
126
  else
93
127
  EMPTY
94
128
  end
@@ -99,21 +133,37 @@ module Termclock
99
133
  EMPTY
100
134
  end
101
135
 
102
- @@os ||= "\u{1F427} Distrib: #{LS::OS.distribution} #{LS::OS.machine}#{@@os_v}"
136
+ _tr = translate('Distrib')
137
+ @@os ||= "\u{1F427} #{_tr}: #{LS::OS.distribution} #{LS::OS.machine}#{@@os_v}"
138
+
139
+ _temp_uptime = LS::OS.uptime
140
+
141
+ _uptime = unless _temp_uptime.empty?
142
+ _temp_uptime
143
+ else
144
+ _u = LS::OS.uptime_i
145
+ {
146
+ hour: _u / 3600,
147
+ minute: _u % 3600 / 60,
148
+ second: _u % 3600 % 60,
149
+ jiffy: 0
150
+ }
151
+ end
103
152
 
104
- _uptime = LS::OS.uptime
105
153
  _second = _uptime[:second]
106
154
  _second_i = _second.to_i
107
155
 
108
156
  hour = "%02d" % _uptime[:hour]
109
157
  minute = "%02d" % _uptime[:minute]
110
- second = "%02d" % _second_i
111
- ms = "%02d" % _second.-(_second_i).*(100)
158
+ second = "%02d" % _uptime[:second]
159
+ jiffy = "%02d" % _uptime[:jiffy]
112
160
 
113
- uptime = "\u{1F3A1} Uptime: #{hour}:#{minute}:#{second}:#{ms} (#{LS::OS.uptime_i}s)"
161
+ _tr = translate('Uptime')
162
+ uptime = "\u{1F3A1} #{_tr}: #{t! hour}:#{t! minute}:#{t! second}:#{t! jiffy} (#{t! LS::OS.uptime_i}s)"
114
163
 
164
+ _tr = translate('LoadAvg')
115
165
  _loadavg = LS::Sysinfo.loads.map! { |x| "%.2f" % x }
116
- loadavg = "\u{1F525} LoadAvg: 1m #{_loadavg[0]}|5m #{_loadavg[1]}|15m #{_loadavg[2]}"
166
+ loadavg = "\u{1F525} #{_tr}: 1m #{translate(_loadavg[0], b: true)}|5m #{translate(_loadavg[1], b: true)}|15m #{translate(_loadavg[2], b: true)}"
117
167
 
118
168
  all_info = []
119
169
  max_l = 0
@@ -153,7 +203,7 @@ module Termclock
153
203
  padding +
154
204
  y_to_s.gradient(tc1, tc2, bold: bold, italic: italic)
155
205
 
156
- len = str.chars.map { |x|
206
+ len = str.grapheme_clusters.map { |x|
157
207
  _x = x.bytesize./(2)
158
208
  _x == 0 ? 1 : _x
159
209
  }.sum
@@ -0,0 +1,61 @@
1
+ module Termclock
2
+ def self.translate(keyword, breakword: nil, b: nil)
3
+ return keyword if LANG == :en
4
+ characters = keyword.grapheme_clusters
5
+
6
+ b = breakword if breakword && !b
7
+ breakword = b if b && !breakword
8
+
9
+ upcased = characters.all? { |x| x.ord.between?(65, 90) }
10
+ downcased = upcased ? false : characters.all? { |x| x.ord.between?(97, 122) }
11
+ capitalized = if (upcased || downcased)
12
+ false
13
+ else
14
+ characters[0].ord.between?(65, 90) &&
15
+ characters.drop(1).all? { |x| x.ord.between?(97, 122) }
16
+ end
17
+
18
+ camelized = if (upcased || downcased || capitalized)
19
+ false
20
+ else
21
+ keyword.split(?\s.freeze).all? { |x|
22
+ x[0].ord.between?(65, 90) && x.chars.drop(1).all? { |y| y.ord.between?(97, 122) }
23
+ }
24
+ end
25
+
26
+ if breakword
27
+ return characters.map { |x|
28
+ tr = TRANSLATIONS[x]
29
+
30
+ if !tr
31
+ tr = TRANSLATIONS[x.downcase]
32
+ end
33
+
34
+ tr.upcase! if tr && upcased
35
+ tr.downcase! if tr && downcased
36
+ tr.capitalize! if tr && capitalized
37
+ tr.camelize! if tr && camelized
38
+
39
+ tr ? tr : x
40
+ }.join
41
+ end
42
+
43
+ tr = TRANSLATIONS[keyword]
44
+
45
+ if !tr
46
+ tr = TRANSLATIONS[keyword.downcase]
47
+
48
+ tr.upcase! if tr && upcased
49
+ tr.downcase! if tr && downcased
50
+ tr.capitalize! if tr && capitalized
51
+ tr.camelize! if tr && camelized
52
+ end
53
+
54
+ tr ? tr : keyword
55
+ end
56
+
57
+ def self.t!(keyword, breakword: true, b: true)
58
+ return keyword if LANG == :en
59
+ translate(keyword.to_s, breakword: true)
60
+ end
61
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Termclock
4
- VERSION = "0.5.1"
4
+ VERSION = "1.0.2"
5
5
  end
@@ -0,0 +1,82 @@
1
+ {
2
+ // Numerals
3
+ "0": "০",
4
+ "1": "১",
5
+ "2": "২",
6
+ "3": "৩",
7
+ "4": "৪",
8
+ "5": "৫",
9
+ "6": "৬",
10
+ "7": "৭",
11
+ "8": "৮",
12
+ "9": "৯",
13
+
14
+ // Days
15
+ "monday": "সোমবার",
16
+ "tuesday": "মঙ্গলবার",
17
+ "wednesday": "বুধবার",
18
+ "thursday": "বৃহস্পতিবার",
19
+ "friday": "শুক্রবার",
20
+ "saturday": "শনিবার",
21
+ "sunday": "রবিবার",
22
+
23
+ "mon": "সোমবার",
24
+ "tue": "মঙ্গলবার",
25
+ "wed": "বুধবার",
26
+ "thu": "বৃহস্পতিবার",
27
+ "fri": "শুক্রবার",
28
+ "sat": "শনিবার",
29
+ "sun": "রবিবার",
30
+
31
+ // Months
32
+ "jan": "জানুয়ারী",
33
+ "feb": "ফেব্রুয়ারী",
34
+ "mar": "মার্চ",
35
+ "apr": "এপ্রিল",
36
+ "may": "মে",
37
+ "jun": "জুন",
38
+ "jul": "জুলাই",
39
+ "aug": "আগস্ট",
40
+ "sep": "সেপ্টেম্বর",
41
+ "oct": "অক্টোবর",
42
+ "nov": "নভেম্বর",
43
+ "dec": "ডিসেম্বর",
44
+
45
+ "january": "জানুয়ারী",
46
+ "february": "ফেব্রুয়ারী",
47
+ "march": "মার্চ",
48
+ "april": "এপ্রিল",
49
+ "june": "জুন",
50
+ "july": "জুলাই",
51
+ "august": "আগস্ট",
52
+ "september": "সেপ্টেম্বর",
53
+ "october": "অক্টোবর",
54
+ "november": "নভেম্বর",
55
+ "december": "ডিসেম্বর",
56
+
57
+ // Messages
58
+ "good morning": "সুপ্রভাত",
59
+ "good afternoon": "শুভ অপরাহ্ন",
60
+ "good evening": "শুভ সন্ধ্যা",
61
+ "good night": "শুভ রাত্রি",
62
+
63
+ // System info
64
+ "User": "ব্যবহারকারী",
65
+ "Distrib": "বিতরণ",
66
+ "Swap": "সোয়াপ",
67
+ "CPU": "সিপিইউ",
68
+ "Mem": "মেম",
69
+ "FS": "ফাইল সিস.",
70
+ "Uptime": "আপটাইম",
71
+ "Hostname": "হোস্টনেম",
72
+ "Battery": "ব্যাটারী",
73
+ "Ip Addr": "আইপি",
74
+ "Curr. DL/UL": "বর্তমান DL/UL",
75
+ "Totl. DL/UL": "মোট DL/UL",
76
+ "Process": "প্রসেস",
77
+ "LoadAvg": "গড় লোড",
78
+ "Discharging": "ডিসচারজিং",
79
+ "Charging": "চার্জিং",
80
+ "Full": "সম্পূর্ণ",
81
+ "Unknown": "অজানা"
82
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ // Days
3
+ "monday": "lunes",
4
+ "tuesday": "martes",
5
+ "wednesday": "miércoles",
6
+ "thursday": "jueves",
7
+ "friday": "viernes",
8
+ "saturday": "sábado",
9
+ "sunday": "dimanche",
10
+
11
+ "mon": "lunes",
12
+ "tue": "martes",
13
+ "wed": "miércoles",
14
+ "thu": "jueves",
15
+ "fri": "viernes",
16
+ "sat": "sábado",
17
+ "sun": "dimanche",
18
+
19
+ // Months
20
+ "jan": "janvier",
21
+ "feb": "février",
22
+ "mar": "mars",
23
+ "apr": "avril",
24
+ "jun": "juin",
25
+ "jul": "juillet",
26
+ "aug": "août",
27
+ "sep": "septembre",
28
+ "oct": "octobre",
29
+ "nov": "novembre",
30
+ "dec": "décembre",
31
+
32
+ "january": "janvier",
33
+ "february": "février",
34
+ "march": "mars",
35
+ "april": "avril",
36
+ "may": "mai",
37
+ "june": "juin",
38
+ "july": "juillet",
39
+ "august": "août",
40
+ "september": "septembre",
41
+ "october": "octobre",
42
+ "november": "novembre",
43
+ "december": "décembre",
44
+
45
+ // Messages
46
+ "good morning": "buenos días",
47
+ "good afternoon": "buenas tardes",
48
+ "good evening": "buenas noches",
49
+ "good night": "buenas noches",
50
+
51
+ // System info
52
+ "User": "Usuario",
53
+ "Distrib": "Distribución",
54
+ "Uptime": "Tiempo de actividad",
55
+ "Hostname": "Nombre de host",
56
+ "Battery": "Batería",
57
+ "Curr. DL/UL": "Actual. DL/UL",
58
+ "Totl. DL/UL": "Total DL/UL",
59
+ "Process": "Proceso",
60
+ "LoadAvg": "Carga promedio",
61
+ "Discharging": "Descarga",
62
+ "Charging": "Cargando",
63
+ "Full": "Lleno",
64
+ "Unknown": "Desconocida"
65
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ // Days
3
+ "monday": "lundi",
4
+ "tuesday": "mardi",
5
+ "wednesday": "mercredi",
6
+ "thursday": "jeudi",
7
+ "friday": "vendredi",
8
+ "saturday": "samedi",
9
+ "sunday": "dimanche",
10
+
11
+ "mon": "lun",
12
+ "tue": "mar",
13
+ "wed": "mer",
14
+ "thu": "jeu",
15
+ "fri": "ven",
16
+ "sat": "sam",
17
+ "sun": "dim",
18
+
19
+ // Months
20
+ "jan": "jav",
21
+ "feb": "fev",
22
+ "mar": "mars",
23
+ "apr": "avr",
24
+ "may": "mai",
25
+ "jun": "juin",
26
+ "jul": "juil",
27
+ "aug": "août",
28
+ "sep": "sep",
29
+ "oct": "oct",
30
+ "nov": "nov",
31
+ "dec": "dec",
32
+
33
+ "january": "janvier",
34
+ "february": "février",
35
+ "march": "mars",
36
+ "april": "avril",
37
+ "june": "juin",
38
+ "july": "juillet",
39
+ "august": "août",
40
+ "september": "septembre",
41
+ "october": "octobre",
42
+ "november": "novembre",
43
+ "december": "décembre",
44
+
45
+ // Messages
46
+ "good morning": "bonjour",
47
+ "good afternoon": "bonne après-midi",
48
+ "good evening": "bonne soirée",
49
+ "good night": "bonne nuit",
50
+
51
+ // System info
52
+ "User": "Utilisateur·ice",
53
+ // Utilisateur : male, Utilisatrice : female, Utilisateur·ice : a mesh of both to say it could be either
54
+ "Uptime": "Temps de fonctionnement",
55
+ "Hostname": "Hôte",
56
+ "Battery": "Batterie",
57
+ "Curr. DL/UL": "DL/UL Actuel",
58
+ "Totl. DL/UL": "DL/UL Total ",
59
+ "Process": "Processus",
60
+ "LoadAvg": "Charge Moyenne",
61
+ "Discharging": "En décharge",
62
+ "Charging": "En charge",
63
+ "Full": "Pleine",
64
+ "Unknown": "inconnue"
65
+ }
@@ -0,0 +1,81 @@
1
+ {
2
+ // Numerals
3
+ "0": "०",
4
+ "1": "१",
5
+ "2": "२",
6
+ "3": "३",
7
+ "4": "४",
8
+ "5": "५",
9
+ "6": "६",
10
+ "7": "७",
11
+ "8": "८",
12
+ "9": "९",
13
+
14
+ // Days
15
+ "monday": "सोमवार",
16
+ "tuesday": "मंगलवार",
17
+ "wednesday": "बुधवार",
18
+ "thursday": "गुरूवार",
19
+ "friday": "शुक्रवार",
20
+ "saturday": "शनिवार",
21
+ "sunday": "रविवार",
22
+
23
+ "mon": "सोमवार",
24
+ "tue": "मंगलवार",
25
+ "wed": "बुधवार",
26
+ "thu": "गुरूवार",
27
+ "fri": "शुक्रवार",
28
+ "sat": "शनिवार",
29
+ "sun": "रविवार",
30
+
31
+ // Months
32
+ "jan": "जनवरी",
33
+ "feb": "फ़रवरी",
34
+ "mar": "मार्च",
35
+ "apr": "अप्रैल",
36
+ "jun": "जून",
37
+ "jul": "जुलाई",
38
+ "aug": "अगस्त",
39
+ "sep": "सितंबर",
40
+ "oct": "अक्टूबर",
41
+ "nov": "नवंबर",
42
+ "dec": "दिसंबर",
43
+
44
+ "january": "जनवरी",
45
+ "february": "फ़रवरी",
46
+ "march": "मार्च",
47
+ "april": "अप्रैल",
48
+ "may": "मई",
49
+ "june": "जून",
50
+ "july": "जुलाई",
51
+ "august": "अगस्त",
52
+ "september": "सितंबर",
53
+ "october": "अक्टूबर",
54
+ "november": "नवंबर",
55
+ "december": "दिसंबर",
56
+
57
+ // Messages
58
+ "good morning": "शुभ प्रभात",
59
+ "good afternoon": "शुभ दोपहर",
60
+ "good evening": "सुसंध्या",
61
+ "good night": "शुभ रात्रि",
62
+
63
+ // System info
64
+ "User": "उपयोगकर्ता",
65
+ "Distrib": "वितरण",
66
+ "Swap": "स्वैप",
67
+ "CPU": "सी पी यू",
68
+ "Mem": "मेम",
69
+ "FS": "फाइल सीस ",
70
+ "Uptime": "अपटाइम",
71
+ "Hostname": "होस्टनाम",
72
+ "Battery": "बैटरी ",
73
+ "Curr. DL/UL": "वर्तमान DL/UL",
74
+ "Totl. DL/UL": "समस्त DL/UL",
75
+ "Process": "प्रोसेस",
76
+ "LoadAvg": "औसत लोड",
77
+ "Discharging": "डिस्चार्जिंग",
78
+ "Charging": "चार्जिंग",
79
+ "Full": "परिपूर्ण",
80
+ "Unknown": "अनजान"
81
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ // Days
3
+ "monday": "lunedi",
4
+ "tuesday": "martedì",
5
+ "wednesday": "mercoledì",
6
+ "thursday": "giovedì",
7
+ "friday": "venerdì",
8
+ "saturday": "sabato",
9
+ "sunday": "domenica",
10
+
11
+ "mon": "lun",
12
+ "tue": "mar",
13
+ "wed": "mer",
14
+ "thu": "gio",
15
+ "fri": "ven",
16
+ "sat": "sab",
17
+ "sun": "do",
18
+
19
+ // Months
20
+ "jan": "gennaio",
21
+ "feb": "febbraio",
22
+ "mar": "marzo",
23
+ "apr": "aprile",
24
+ "may": "maggio",
25
+ "jun": "giugno",
26
+ "jul": "luglio",
27
+ "aug": "agosto",
28
+ "sep": "settembre",
29
+ "oct": "ottobre",
30
+ "nov": "novembre",
31
+ "dec": "dicembre",
32
+
33
+ "january": "gennaio",
34
+ "february": "febbraio",
35
+ "march": "marzo",
36
+ "april": "aprile",
37
+ "june": "giugno",
38
+ "july": "luglio",
39
+ "august": "agosto",
40
+ "september": "settembre",
41
+ "october": "ottobre",
42
+ "november": "novembre",
43
+ "december": "dicembre",
44
+
45
+ // Messages
46
+ "good morning": "buongiorno",
47
+ "good afternoon": "buon pomeriggio",
48
+ "good evening": "buonasera",
49
+ "good night": "buona Notte",
50
+
51
+ // System info
52
+ "User": "Utente",
53
+ "Distrib": "Distribuzione",
54
+ "Hostname": "Nome host",
55
+ "Battery": "batteria",
56
+ "Curr. DL/UL": "Attuale DL/UL",
57
+ "Totl. DL/UL": "Totale DL/UL",
58
+ "Process": "Processi",
59
+ "LoadAvg": "Carico Medio",
60
+ "Discharging": "Scaricando",
61
+ "Charging": "In carica",
62
+ "Full": "Piena",
63
+ "Unknown": "Sconosciuta"
64
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ // Days
3
+ "monday": "Понедельник",
4
+ "tuesday": "Вторник",
5
+ "wednesday": "Среда",
6
+ "thursday": "Четверг",
7
+ "friday": "Пятница",
8
+ "saturday": "Суббота",
9
+ "sunday": "Воскресенье",
10
+
11
+ "mon": "Понедельник",
12
+ "tue": "Вторник",
13
+ "wed": "Среда",
14
+ "thu": "Четверг",
15
+ "fri": "Пятница",
16
+ "sat": "Суббота",
17
+ "sun": "Воскресенье",
18
+
19
+ // Months
20
+ "jan": "Январь",
21
+ "feb": "Февраль",
22
+ "mar": "Март",
23
+ "apr": "Апрель",
24
+ "may": "Май",
25
+ "jun": "Июнь",
26
+ "jul": "Июль",
27
+ "aug": "Август",
28
+ "sep": "Сентябрь",
29
+ "oct": "Октябрь",
30
+ "nov": "Ноябрь",
31
+ "dec": "Декабрь",
32
+
33
+ "january": "Январь",
34
+ "february": "Февраль",
35
+ "march": "Март",
36
+ "april": "Апрель",
37
+ "june": "Июнь",
38
+ "july": "Июль",
39
+ "august": "Август",
40
+ "september": "Сентябрь",
41
+ "october": "Октябрь",
42
+ "november": "Ноябрь",
43
+ "december": "Декабрь",
44
+
45
+ // Messages
46
+ "good morning": "доброе утро",
47
+ "good afternoon": "Добрый день",
48
+ "good evening": "Добрый вечер",
49
+ "good night": "спокойной ночи",
50
+
51
+ // System info
52
+ "User": "Пользователь",
53
+ "Distrib": "распределение",
54
+ "Swap": "свап",
55
+ "CPU": "Процессор",
56
+ "Mem": "мем",
57
+ "Hostname": "имя хоста",
58
+ "Battery": "аккумулятор",
59
+ "Curr. DL/UL": "теперешний дл/ул",
60
+ "Totl. DL/UL": "общее дл/ул",
61
+ "Process": "Процесс",
62
+ "LoadAvg": "средняя нагрузка",
63
+ "Discharging": "Разрядка",
64
+ "Charging": "Зарядка ",
65
+ "Full": "Полный",
66
+ "Unknown": "Неизвестный"
67
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: termclock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sourav Goswami
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-24 00:00:00.000000000 Z
11
+ date: 2021-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: linux_stat
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.1
19
+ version: 2.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.5.1
26
+ version: 2.3.0
27
27
  description: A clock for Linux VTE
28
28
  email:
29
29
  - souravgoswami@protonmail.com
@@ -34,12 +34,20 @@ extra_rdoc_files: []
34
34
  files:
35
35
  - exe/termclock
36
36
  - lib/termclock.rb
37
+ - lib/termclock/center_puts.rb
37
38
  - lib/termclock/hex2rgb.rb
38
39
  - lib/termclock/parse_characters.rb
39
40
  - lib/termclock/start.rb
40
41
  - lib/termclock/string.rb
41
42
  - lib/termclock/system_info.rb
43
+ - lib/termclock/translate.rb
42
44
  - lib/termclock/version.rb
45
+ - lib/translations/bn.json
46
+ - lib/translations/es.json
47
+ - lib/translations/fr.json
48
+ - lib/translations/hi.json
49
+ - lib/translations/it.json
50
+ - lib/translations/ru.json
43
51
  homepage: https://github.com/souravgoswami/termclock
44
52
  licenses:
45
53
  - MIT
@@ -59,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
67
  - !ruby/object:Gem::Version
60
68
  version: '0'
61
69
  requirements: []
62
- rubygems_version: 3.1.4
70
+ rubygems_version: 3.2.21
63
71
  signing_key:
64
72
  specification_version: 4
65
73
  summary: A clock for Linux VTE