foreman-tasks 9.2.2 → 10.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -2
- data/app/assets/javascripts/foreman-tasks/locale/de/foreman_tasks.js +4 -4
- data/app/assets/javascripts/foreman-tasks/locale/en/foreman_tasks.js +1 -1
- data/app/assets/javascripts/foreman-tasks/locale/es/foreman_tasks.js +13 -13
- data/app/assets/javascripts/foreman-tasks/locale/fr/foreman_tasks.js +38 -38
- data/app/assets/javascripts/foreman-tasks/locale/ja/foreman_tasks.js +20 -20
- data/app/assets/javascripts/foreman-tasks/locale/ka/foreman_tasks.js +13 -13
- data/app/assets/javascripts/foreman-tasks/locale/ko/foreman_tasks.js +3 -3
- data/app/assets/javascripts/foreman-tasks/locale/pt_BR/foreman_tasks.js +13 -13
- data/app/assets/javascripts/foreman-tasks/locale/ru/foreman_tasks.js +3 -3
- data/app/assets/javascripts/foreman-tasks/locale/zh_CN/foreman_tasks.js +23 -23
- data/app/assets/javascripts/foreman-tasks/locale/zh_TW/foreman_tasks.js +3 -3
- data/app/lib/actions/middleware/keep_current_request_id.rb +1 -1
- data/foreman-tasks.gemspec +1 -0
- data/lib/foreman_tasks/engine.rb +104 -102
- data/lib/foreman_tasks/version.rb +1 -1
- data/lib/tasks/gettext.rake +13 -8
- data/locale/de/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/de/foreman_tasks.po +5 -5
- data/locale/en/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/en/foreman_tasks.po +1 -1
- data/locale/es/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/es/foreman_tasks.po +13 -13
- data/locale/foreman_tasks.pot +2 -2
- data/locale/fr/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/fr/foreman_tasks.po +38 -38
- data/locale/ja/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ja/foreman_tasks.po +20 -20
- data/locale/ka/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ka/foreman_tasks.po +13 -13
- data/locale/ko/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ko/foreman_tasks.po +3 -3
- data/locale/pt_BR/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/pt_BR/foreman_tasks.po +13 -13
- data/locale/ru/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/ru/foreman_tasks.po +3 -3
- data/locale/zh_CN/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/zh_CN/foreman_tasks.po +23 -23
- data/locale/zh_TW/LC_MESSAGES/foreman_tasks.mo +0 -0
- data/locale/zh_TW/foreman_tasks.po +3 -3
- data/test/lib/actions/middleware/keep_current_request_id_test.rb +3 -3
- metadata +16 -2
data/lib/foreman_tasks/engine.rb
CHANGED
@@ -16,116 +16,118 @@ module ForemanTasks
|
|
16
16
|
SETTINGS[:foreman_tasks] = { :assets => { :precompile => assets_to_precompile } }
|
17
17
|
end
|
18
18
|
|
19
|
-
initializer 'foreman_tasks.register_plugin', :before => :finisher_hook do |
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
19
|
+
initializer 'foreman_tasks.register_plugin', :before => :finisher_hook do |app|
|
20
|
+
app.reloader.to_prepare do
|
21
|
+
Foreman::Plugin.register :"foreman-tasks" do
|
22
|
+
requires_foreman '>= 3.13'
|
23
|
+
divider :top_menu, :parent => :monitor_menu, :last => true, :caption => N_('Foreman Tasks')
|
24
|
+
menu :top_menu, :tasks,
|
25
|
+
:url_hash => { :controller => 'foreman_tasks/tasks', :action => :index },
|
26
|
+
:caption => N_('Tasks'),
|
27
|
+
:parent => :monitor_menu,
|
28
|
+
:last => true
|
29
|
+
|
30
|
+
menu :top_menu, :recurring_logics,
|
31
|
+
:url_hash => { :controller => 'foreman_tasks/recurring_logics', :action => :index },
|
32
|
+
:caption => N_('Recurring Logics'),
|
33
|
+
:parent => :monitor_menu,
|
34
|
+
:last => true
|
35
|
+
|
36
|
+
security_block :foreman_tasks do |_map|
|
37
|
+
permission :view_foreman_tasks, { :'foreman_tasks/tasks' => [:auto_complete_search, :sub_tasks, :index, :summary, :summary_sub_tasks, :show],
|
38
|
+
:'foreman_tasks/react' => [:index],
|
39
|
+
:'foreman_tasks/api/tasks' => [:bulk_search, :show, :index, :summary, :summary_sub_tasks, :details, :sub_tasks] }, :resource_type => 'ForemanTasks::Task'
|
40
|
+
permission :edit_foreman_tasks, { :'foreman_tasks/tasks' => [:resume, :unlock, :force_unlock, :cancel_step, :cancel, :abort],
|
41
|
+
:'foreman_tasks/api/tasks' => [:bulk_resume, :bulk_cancel, :bulk_stop] }, :resource_type => 'ForemanTasks::Task'
|
42
|
+
|
43
|
+
permission :create_recurring_logics, {}, :resource_type => 'ForemanTasks::RecurringLogic'
|
44
|
+
|
45
|
+
permission :view_recurring_logics, { :'foreman_tasks/recurring_logics' => [:auto_complete_search, :index, :show],
|
46
|
+
:'foreman_tasks/api/recurring_logics' => [:index, :show] }, :resource_type => 'ForemanTasks::RecurringLogic'
|
47
|
+
|
48
|
+
permission :edit_recurring_logics, { :'foreman_tasks/recurring_logics' => [:cancel, :enable, :disable, :clear_cancelled],
|
49
|
+
:'foreman_tasks/api/recurring_logics' => [:cancel, :update, :bulk_destroy] }, :resource_type => 'ForemanTasks::RecurringLogic'
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
52
|
+
add_all_permissions_to_default_roles
|
53
|
+
|
54
|
+
settings do
|
55
|
+
category(:tasks, N_('Tasks')) do
|
56
|
+
setting('foreman_tasks_sync_task_timeout',
|
57
|
+
type: :integer,
|
58
|
+
description: N_('Number of seconds to wait for synchronous task to finish.'),
|
59
|
+
default: 120,
|
60
|
+
full_name: N_('Sync task timeout'))
|
61
|
+
setting('dynflow_enable_console',
|
62
|
+
type: :boolean,
|
63
|
+
description: N_('Enable the dynflow console (/foreman_tasks/dynflow) for debugging'),
|
64
|
+
default: true,
|
65
|
+
full_name: N_('Enable dynflow console'))
|
66
|
+
setting('dynflow_console_require_auth',
|
67
|
+
type: :boolean,
|
68
|
+
description: N_('Require user to be authenticated as user with admin rights when accessing dynflow console'),
|
69
|
+
default: true,
|
70
|
+
full_name: N_('Require auth for dynflow console'))
|
71
|
+
setting('foreman_tasks_proxy_action_retry_count',
|
72
|
+
type: :integer,
|
73
|
+
description: N_('Number of attempts to start a task on the smart proxy before failing'),
|
74
|
+
default: 4,
|
75
|
+
full_name: N_('Proxy action retry count'))
|
76
|
+
setting('foreman_tasks_proxy_action_retry_interval',
|
77
|
+
type: :integer,
|
78
|
+
description: N_('Time in seconds between retries'),
|
79
|
+
default: 15,
|
80
|
+
full_name: N_('Proxy action retry interval'))
|
81
|
+
setting('foreman_tasks_proxy_batch_trigger',
|
82
|
+
type: :boolean,
|
83
|
+
description: N_('Allow triggering tasks on the smart proxy in batches'),
|
84
|
+
default: true,
|
85
|
+
full_name: N_('Allow proxy batch tasks'))
|
86
|
+
setting('foreman_tasks_proxy_batch_size',
|
87
|
+
type: :integer,
|
88
|
+
description: N_('Number of tasks which should be sent to the smart proxy in one request, if foreman_tasks_proxy_batch_trigger is enabled'),
|
89
|
+
default: 100,
|
90
|
+
full_name: N_('Proxy tasks batch size'))
|
91
|
+
setting('foreman_tasks_troubleshooting_url',
|
92
|
+
type: :string,
|
93
|
+
description: N_('Url pointing to the task troubleshooting documentation. '\
|
94
|
+
'It should contain %{label} placeholder, that will be replaced with normalized task label '\
|
95
|
+
'(restricted to only alphanumeric characters)). %{version} placeholder is also available.'),
|
96
|
+
default: nil,
|
97
|
+
full_name: N_('Tasks troubleshooting URL'))
|
98
|
+
setting('foreman_tasks_polling_multiplier',
|
99
|
+
type: :integer,
|
100
|
+
description: N_('Polling multiplier which is used to multiply the default polling intervals. '\
|
101
|
+
'This can be used to prevent polling too frequently for long running tasks.'),
|
102
|
+
default: 1,
|
103
|
+
full_name: N_("Polling intervals multiplier"),
|
104
|
+
validate: { numericality: { greater_than: 0 } })
|
105
|
+
end
|
104
106
|
end
|
105
|
-
end
|
106
107
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
108
|
+
register_graphql_query_field :task, '::Types::Task', :record_field
|
109
|
+
register_graphql_query_field :tasks, '::Types::Task', :collection_field
|
110
|
+
register_graphql_query_field :recurring_logic, '::Types::RecurringLogic', :record_field
|
111
|
+
register_graphql_query_field :recurring_logics, '::Types::RecurringLogic', :collection_field
|
111
112
|
|
112
|
-
|
113
|
+
register_graphql_mutation_field :cancel_recurring_logic, '::Mutations::RecurringLogics::Cancel'
|
113
114
|
|
114
|
-
|
115
|
-
|
115
|
+
logger :dynflow, :enabled => true
|
116
|
+
logger :action, :enabled => true
|
116
117
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
118
|
+
role 'Tasks Manager', [:view_foreman_tasks, :edit_foreman_tasks],
|
119
|
+
'Role granting permissions to inspect, cancel, resume and unlock tasks'
|
120
|
+
role 'Tasks Reader', [:view_foreman_tasks],
|
121
|
+
'Role granting permissions to inspect tasks'
|
121
122
|
|
122
|
-
|
123
|
-
|
123
|
+
widget 'foreman_tasks/tasks/dashboard/tasks_status', :sizex => 6, :sizey => 1, :name => N_('Task Status')
|
124
|
+
widget 'foreman_tasks/tasks/dashboard/latest_tasks_in_error_warning', :sizex => 6, :sizey => 1, :name => N_('Latest Warning/Error Tasks')
|
124
125
|
|
125
|
-
|
126
|
+
register_gettext domain: "foreman_tasks"
|
126
127
|
|
127
|
-
|
128
|
-
|
128
|
+
ForemanTasks.dynflow.eager_load_actions!
|
129
|
+
extend_observable_events(::Dynflow::Action.descendants.select { |klass| klass <= ::Actions::ObservableAction }.map(&:namespaced_event_names))
|
130
|
+
end
|
129
131
|
end
|
130
132
|
end
|
131
133
|
|
@@ -160,7 +162,7 @@ module ForemanTasks
|
|
160
162
|
world.middleware.use Actions::Middleware::KeepCurrentTaxonomies
|
161
163
|
world.middleware.use Actions::Middleware::KeepCurrentUser, :before => ::Dynflow::Middleware::Common::Transaction
|
162
164
|
world.middleware.use Actions::Middleware::KeepCurrentTimezone
|
163
|
-
world.middleware.use Actions::Middleware::
|
165
|
+
world.middleware.use Actions::Middleware::KeepCurrentRequestId
|
164
166
|
world.middleware.use ::Actions::Middleware::LoadSettingValues
|
165
167
|
ForemanTasks.register_scheduled_task(Actions::CheckLongRunningTasks, ENV['FOREMAN_TASKS_CHECK_LONG_RUNNING_TASKS_CRONLINE'] || '0 0 * * *')
|
166
168
|
end
|
data/lib/tasks/gettext.rake
CHANGED
@@ -8,8 +8,6 @@ if gettext_find_task
|
|
8
8
|
namespace :gettext do
|
9
9
|
task :store_action_names => :environment do
|
10
10
|
storage_file = "#{locale_path}/action_names.rb"
|
11
|
-
puts "writing action translations to: #{storage_file}"
|
12
|
-
|
13
11
|
klasses = Actions::EntryAction
|
14
12
|
.subclasses
|
15
13
|
.uniq
|
@@ -18,12 +16,19 @@ if gettext_find_task
|
|
18
16
|
src.start_with? @engine.root.to_s
|
19
17
|
end
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
19
|
+
if klasses.any?
|
20
|
+
puts "writing action translations to: #{storage_file}"
|
21
|
+
|
22
|
+
File.write storage_file,
|
23
|
+
"# Autogenerated!\n" +
|
24
|
+
klasses
|
25
|
+
.map { |klass| %[_("#{klass.allocate.humanized_name}")] }
|
26
|
+
.sort
|
27
|
+
.join("\n") + "\n"
|
28
|
+
elsif File.exist? storage_file
|
29
|
+
puts "Removing empty action translations file: #{storage_file}"
|
30
|
+
File.delete storage_file
|
31
|
+
end
|
27
32
|
end
|
28
33
|
end
|
29
34
|
|
Binary file
|
data/locale/de/foreman_tasks.po
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
# Crited <Alexander.Stoll@netways.de>, 2019
|
7
7
|
# Ettore Atalan <atalanttore@googlemail.com>, 2016-2017,2023
|
8
8
|
# Nonof Yourbusiness <jonasschell@ocupe.org>, 2019
|
9
|
-
#
|
9
|
+
# pdolinic, 2021
|
10
10
|
msgid ""
|
11
11
|
msgstr ""
|
12
|
-
"Project-Id-Version: foreman_tasks
|
12
|
+
"Project-Id-Version: foreman_tasks 9.2.2\n"
|
13
13
|
"Report-Msgid-Bugs-To: \n"
|
14
14
|
"PO-Revision-Date: 2016-02-12 14:04+0000\n"
|
15
15
|
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>, 2016-2017,2023\n"
|
@@ -355,7 +355,7 @@ msgid "Mon"
|
|
355
355
|
msgstr "Mo"
|
356
356
|
|
357
357
|
msgid "More details"
|
358
|
-
msgstr ""
|
358
|
+
msgstr "Weitere Details"
|
359
359
|
|
360
360
|
msgid "More than"
|
361
361
|
msgstr "Mehr als"
|
@@ -626,7 +626,7 @@ msgid "Sub tasks of %s"
|
|
626
626
|
msgstr "Unteraufgaben von %s."
|
627
627
|
|
628
628
|
msgid "Subscribe"
|
629
|
-
msgstr ""
|
629
|
+
msgstr "Abonnieren"
|
630
630
|
|
631
631
|
msgid "Sun"
|
632
632
|
msgstr "So"
|
@@ -739,7 +739,7 @@ msgid "UUID of the task"
|
|
739
739
|
msgstr "UUID der Aufgabe"
|
740
740
|
|
741
741
|
msgid "Unable to create mail notification: %s"
|
742
|
-
msgstr ""
|
742
|
+
msgstr "Unable to create mail notification: %s"
|
743
743
|
|
744
744
|
msgid "Unable to enable mail notification to user '%s': %s"
|
745
745
|
msgstr ""
|
Binary file
|
data/locale/en/foreman_tasks.po
CHANGED
Binary file
|
data/locale/es/foreman_tasks.po
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# francis <hackgo@gmail.com>, 2017
|
8
8
|
msgid ""
|
9
9
|
msgstr ""
|
10
|
-
"Project-Id-Version: foreman_tasks
|
10
|
+
"Project-Id-Version: foreman_tasks 9.2.2\n"
|
11
11
|
"Report-Msgid-Bugs-To: \n"
|
12
12
|
"PO-Revision-Date: 2016-02-12 14:04+0000\n"
|
13
13
|
"Last-Translator: francis <hackgo@gmail.com>, 2017\n"
|
@@ -21,16 +21,16 @@ msgstr ""
|
|
21
21
|
" 2;\n"
|
22
22
|
|
23
23
|
msgid "%(last)s Last %(time)s"
|
24
|
-
msgstr "
|
24
|
+
msgstr "último"
|
25
25
|
|
26
26
|
msgid "%(older)s Older %(time)s"
|
27
|
-
msgstr "
|
27
|
+
msgstr "más antiguo"
|
28
28
|
|
29
29
|
msgid "%s Selected Tasks"
|
30
30
|
msgstr "%s Tareas seleccionadas"
|
31
31
|
|
32
32
|
msgid "%s is not valid format of cron line"
|
33
|
-
msgstr "%s no
|
33
|
+
msgstr "%s no tiene formato válido de la línea Cron."
|
34
34
|
|
35
35
|
msgid "%{count} tasks are in running or paused state for more than a day"
|
36
36
|
msgstr ""
|
@@ -178,7 +178,7 @@ msgid "Cron line"
|
|
178
178
|
msgstr "Línea Cron"
|
179
179
|
|
180
180
|
msgid "Cron line format 'a b c d e', where: %s"
|
181
|
-
msgstr "
|
181
|
+
msgstr "Formato de la línea Cron 'a b c d e', donde: %s"
|
182
182
|
|
183
183
|
msgid "Current iteration"
|
184
184
|
msgstr "Iteración actual"
|
@@ -355,7 +355,7 @@ msgid "Mon"
|
|
355
355
|
msgstr "Lun"
|
356
356
|
|
357
357
|
msgid "More details"
|
358
|
-
msgstr ""
|
358
|
+
msgstr "Más información"
|
359
359
|
|
360
360
|
msgid "More than"
|
361
361
|
msgstr "Más de"
|
@@ -422,7 +422,7 @@ msgid "Other includes all stopped tasks that are cancelled or pending"
|
|
422
422
|
msgstr "Otros incluye todas las tareas paradas que están canceladas o pendientes"
|
423
423
|
|
424
424
|
msgid "Other:"
|
425
|
-
msgstr "
|
425
|
+
msgstr "Otro"
|
426
426
|
|
427
427
|
msgid "Output"
|
428
428
|
msgstr "Salida"
|
@@ -509,7 +509,7 @@ msgid "Resource search_params requires resource_type and resource_id to be speci
|
|
509
509
|
msgstr "search_params del recurso requiere que se especifique resource_type y resource_id."
|
510
510
|
|
511
511
|
msgid "Resources for %s task(s) will be unlocked and will not prevent other tasks from being run. As the task(s) might be still running, it should be avoided to use this unless you are really sure the task(s) got stuck."
|
512
|
-
msgstr "Los recursos
|
512
|
+
msgstr "Los recursos se desbloquearán y no se evitará que otras tareas se ejecuten. Dado que es posible que la tarea se esté ejecutando, se debe evitar el uso de esta acción a menos que se esté realmente seguro de que la tarea se atascó."
|
513
513
|
|
514
514
|
msgid "Result"
|
515
515
|
msgstr "Resultado:"
|
@@ -626,7 +626,7 @@ msgid "Sub tasks of %s"
|
|
626
626
|
msgstr "Subtareas de %s"
|
627
627
|
|
628
628
|
msgid "Subscribe"
|
629
|
-
msgstr ""
|
629
|
+
msgstr "Suscribir"
|
630
630
|
|
631
631
|
msgid "Sun"
|
632
632
|
msgstr "Dom"
|
@@ -734,13 +734,13 @@ msgid "Tue"
|
|
734
734
|
msgstr "Mar"
|
735
735
|
|
736
736
|
msgid "Type %s for search_params is not supported"
|
737
|
-
msgstr "
|
737
|
+
msgstr "El tipo %s para search_params no se admite."
|
738
738
|
|
739
739
|
msgid "UUID of the task"
|
740
740
|
msgstr "UUID de la tarea"
|
741
741
|
|
742
742
|
msgid "Unable to create mail notification: %s"
|
743
|
-
msgstr ""
|
743
|
+
msgstr "No se pudo crear la notificación de correo: %s"
|
744
744
|
|
745
745
|
msgid "Unable to enable mail notification to user '%s': %s"
|
746
746
|
msgstr ""
|
@@ -758,7 +758,7 @@ msgid "Update recurring logic"
|
|
758
758
|
msgstr "Actualizar lógica recurrente"
|
759
759
|
|
760
760
|
msgid "Url pointing to the task troubleshooting documentation. It should contain %{label} placeholder, that will be replaced with normalized task label (restricted to only alphanumeric characters)). %{version} placeholder is also available."
|
761
|
-
msgstr "
|
761
|
+
msgstr "URL que lleva a la documentación de la tarea de resolución de problemas. Debe contener el marcador de posición %{label}, que será reemplazado por la etiqueta de tarea normalizada (restringida solo a caracteres alfanuméricos). También está disponible el marcador de posición %{versión}."
|
762
762
|
|
763
763
|
msgid "User search_params requires user_id to be specified"
|
764
764
|
msgstr "search_params del usuario requiere que se especifique el user_id."
|
@@ -835,7 +835,7 @@ msgid "organization"
|
|
835
835
|
msgstr "Organización"
|
836
836
|
|
837
837
|
msgid "other"
|
838
|
-
msgstr "
|
838
|
+
msgstr "Otro"
|
839
839
|
|
840
840
|
msgid "paused"
|
841
841
|
msgstr "pausado"
|
data/locale/foreman_tasks.pot
CHANGED
@@ -8,8 +8,8 @@ msgid ""
|
|
8
8
|
msgstr ""
|
9
9
|
"Project-Id-Version: foreman_tasks 1.0.0\n"
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
11
|
-
"POT-Creation-Date: 2024-07-
|
12
|
-
"PO-Revision-Date: 2024-07-
|
11
|
+
"POT-Creation-Date: 2024-07-17 17:08+0200\n"
|
12
|
+
"PO-Revision-Date: 2024-07-17 17:08+0200\n"
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15
15
|
"Language: \n"
|
Binary file
|