From 5c113f6510fc46b899fa943c1cbe4c019a0aed4b Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Mon, 9 Dec 2024 10:17:42 -0500 Subject: [PATCH 01/13] Adds i18n-tasks gem & associated tests --- apps/dashboard/Gemfile | 1 + apps/dashboard/Gemfile.lock | 27 ++++ apps/dashboard/config/i18n-tasks.yml | 178 ++++++++++++++++++++++++++ apps/dashboard/test/unit/i18n_test.rb | 36 ++++++ 4 files changed, 242 insertions(+) create mode 100644 apps/dashboard/config/i18n-tasks.yml create mode 100644 apps/dashboard/test/unit/i18n_test.rb diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index 3fad5f2970..83190f1652 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -39,6 +39,7 @@ end group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' + gem 'i18n-tasks' end # lock gems to versions that are compatible with ruby 2.7.0, diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index 796090b63b..d281ee1cc0 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -68,6 +68,7 @@ GEM tzinfo (~> 2.0) addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) + ast (2.4.2) autoprefixer-rails (10.2.5.1) execjs (> 0) base64 (0.2.0) @@ -115,11 +116,24 @@ GEM ffi (1.16.3) globalid (1.2.1) activesupport (>= 6.1) + highline (3.1.1) + reline http-accept (1.7.0) http-cookie (1.0.8) domain_name (~> 0.5) i18n (1.14.6) concurrent-ruby (~> 1.0) + i18n-tasks (1.0.14) + activesupport (>= 4.0.2) + ast (>= 2.1.0) + erubi + highline (>= 2.0.0) + i18n + parser (>= 3.2.2.1) + rails-i18n + rainbow (>= 2.2.2, < 4.0) + terminal-table (>= 1.5.1) + io-console (0.8.0) jbuilder (2.13.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) @@ -181,6 +195,9 @@ GEM ood_support (~> 0.0.2) rexml (~> 3.2) ood_support (0.0.5) + parser (3.3.6.0) + ast (~> 2.4.1) + racc pry (0.15.0) coderay (~> 1.1) method_source (~> 1.0) @@ -216,6 +233,9 @@ GEM rails-html-sanitizer (1.6.2) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + rails-i18n (7.0.10) + i18n (>= 0.7, < 2) + railties (>= 6.0.0, < 8) railties (7.0.8.5) actionpack (= 7.0.8.5) activesupport (= 7.0.8.5) @@ -223,11 +243,14 @@ GEM rake (>= 12.2) thor (~> 1.0) zeitwerk (~> 2.5) + rainbow (3.1.1) rake (13.2.1) rdoc (6.9.0) psych (>= 4.0.0) redcarpet (3.6.0) regexp_parser (2.9.3) + reline (0.5.12) + io-console (~> 0.5) request_store (1.7.0) rack (>= 1.4) rest-client (2.1.0) @@ -266,6 +289,8 @@ GEM activesupport (>= 6.1) sprockets (>= 3.0.0) stringio (3.1.2) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) thor (1.3.2) tilt (2.4.0) timecop (0.9.10) @@ -276,6 +301,7 @@ GEM railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) + unicode-display_width (2.6.0) webrick (1.9.1) websocket (1.2.11) websocket-driver (0.7.6) @@ -302,6 +328,7 @@ DEPENDENCIES dotenv-rails (~> 2.1) dotiw erubi + i18n-tasks jbuilder (~> 2.0) jsbundling-rails (~> 1.0) local_time (~> 1.0.3) diff --git a/apps/dashboard/config/i18n-tasks.yml b/apps/dashboard/config/i18n-tasks.yml new file mode 100644 index 0000000000..6a409b5556 --- /dev/null +++ b/apps/dashboard/config/i18n-tasks.yml @@ -0,0 +1,178 @@ +# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks + +# The "main" locale. +base_locale: en +## All available locales are inferred from the data by default. Alternatively, specify them explicitly: +# locales: [es, fr] +## Reporting locale, default: en. Available: en, ru. +# internal_locale: en + +# Read and write translations. +data: + ## Translations are read from the file system. Supported format: YAML, JSON. + ## Provide a custom adapter: + # adapter: I18n::Tasks::Data::FileSystem + + # Locale files or `Dir.glob` patterns where translations are read from: + read: + ## Default: + # - config/locales/%{locale}.yml + ## More files: + # - config/locales/**/*.%{locale}.yml + + # Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom: + # `i18n-tasks normalize -p` will force move the keys according to these rules + write: + ## For example, write devise and simple form keys to their respective files: + # - ['{devise, simple_form}.*', 'config/locales/\1.%{locale}.yml'] + ## Catch-all default: + # - config/locales/%{locale}.yml + + # External locale data (e.g. gems). + # This data is not considered unused and is never written to. + external: + ## Example (replace %#= with %=): + # - "<%#= %x[bundle info vagrant --path].chomp %>/templates/locales/%{locale}.yml" + + ## Specify the router (see Readme for details). Valid values: conservative_router, pattern_router, isolating_router, or a custom class. + # router: conservative_router + + yaml: + write: + # do not wrap lines at 80 characters + line_width: -1 + + ## Pretty-print JSON: + # json: + # write: + # indent: ' ' + # space: ' ' + # object_nl: "\n" + # array_nl: "\n" + +# Find translate calls +search: + ## Paths or `Find.find` patterns to search in: + # paths: + # - app/ + + ## Root directories for relative keys resolution. + # relative_roots: + # - app/controllers + # - app/helpers + # - app/mailers + # - app/presenters + # - app/views + + ## Directories where method names which should not be part of a relative key resolution. + # By default, if a relative translation is used inside a method, the name of the method will be considered part of the resolved key. + # Directories listed here will not consider the name of the method part of the resolved key + # + # relative_exclude_method_name_paths: + # - + + ## Files or `File.fnmatch` patterns to exclude from search. Some files are always excluded regardless of this setting: + ## *.jpg *.jpeg *.png *.gif *.svg *.ico *.eot *.otf *.ttf *.woff *.woff2 *.pdf *.css *.sass *.scss *.less + ## *.yml *.json *.zip *.tar.gz *.swf *.flv *.mp3 *.wav *.flac *.webm *.mp4 *.ogg *.opus *.webp *.map *.xlsx + exclude: + - app/assets/images + - app/assets/fonts + - app/assets/videos + - app/assets/builds + + ## Alternatively, the only files or `File.fnmatch patterns` to search in `paths`: + ## If specified, this settings takes priority over `exclude`, but `exclude` still applies. + # only: ["*.rb", "*.html.slim"] + + ## If `strict` is `false`, guess usages such as t("categories.#{category}.title"). The default is `true`. + # strict: true + + ## Allows adding ast_matchers for finding translations using the AST-scanners + ## The available matchers are: + ## - RailsModelMatcher + ## Matches ActiveRecord translations like + ## User.human_attribute_name(:email) and User.model_name.human + ## - DefaultI18nSubjectMatcher + ## Matches ActionMailer's default_i18n_subject method + ## + ## To implement your own, please see `I18n::Tasks::Scanners::AstMatchers::BaseMatcher`. + # ast_matchers: + # - 'I18n::Tasks::Scanners::AstMatchers::RailsModelMatcher' + # - 'I18n::Tasks::Scanners::AstMatchers::DefaultI18nSubjectMatcher' + + ## Multiple scanners can be used. Their results are merged. + ## The options specified above are passed down to each scanner. Per-scanner options can be specified as well. + ## See this example of a custom scanner: https://github.com/glebm/i18n-tasks/wiki/A-custom-scanner-example + +## Translation Services +# translation: +# # Google Translate +# # Get an API key and set billing info at https://code.google.com/apis/console to use Google Translate +# google_translate_api_key: "AbC-dEf5" +# # DeepL Pro Translate +# # Get an API key and subscription at https://www.deepl.com/pro to use DeepL Pro +# deepl_api_key: "48E92789-57A3-466A-9959-1A1A1A1A1A1A" +# # deepl_host: "https://api.deepl.com" +# # deepl_version: "v2" +# # deepl_glossary_ids: +# # - f28106eb-0e06-489e-82c6-8215d6f95089 +# # - 2c6415be-1852-4f54-9e1b-d800463496b4 +# # add additional options to the DeepL.translate call: https://www.deepl.com/docs-api/translate-text/translate-text/ +# deepl_options: +# formality: prefer_less +# # OpenAI +# openai_api_key: "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +# # openai_model: "gpt-3.5-turbo" # see https://platform.openai.com/docs/models +# # may contain `%{from}` and `%{to}`, which will be replaced by source and target locale codes, respectively (using `Kernel.format`) +# # openai_system_prompt: >- +# # You are a professional translator that translates content from the %{from} locale +# # to the %{to} locale in an i18n locale array. +# # +# # The array has a structured format and contains multiple strings. Your task is to translate +# # each of these strings and create a new array with the translated strings. +# # +# # HTML markups (enclosed in < and > characters) must not be changed under any circumstance. +# # Variables (starting with %%{ and ending with }) must not be changed under any circumstance. +# # +# # Keep in mind the context of all the strings for a more accurate translation. + +## Do not consider these keys missing: +# ignore_missing: +# - 'errors.messages.{accepted,blank,invalid,too_short,too_long}' +# - '{devise,simple_form}.*' + +## Consider these keys used: +# ignore_unused: +# - 'activerecord.attributes.*' +# - '{devise,kaminari,will_paginate}.*' +# - 'simple_form.{yes,no}' +# - 'simple_form.{placeholders,hints,labels}.*' +# - 'simple_form.{error_notification,required}.:' + +## Exclude these keys from the `i18n-tasks eq-base' report: +# ignore_eq_base: +# all: +# - common.ok +# fr,es: +# - common.brand + +## Exclude these keys from the `i18n-tasks check-consistent-interpolations` report: +# ignore_inconsistent_interpolations: +# - 'activerecord.attributes.*' + +## Ignore these keys completely: +# ignore: +# - kaminari.* + +## Sometimes, it isn't possible for i18n-tasks to match the key correctly, +## e.g. in case of a relative key defined in a helper method. +## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.: +# +# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', +# only: %w(*.html.haml *.html.slim), +# patterns: [['= title\b', '.page_title']] %> +# +# The PatternMapper can also match key literals via a special %{key} interpolation, e.g.: +# +# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', +# patterns: [['\bSpree\.t[( ]\s*%{key}', 'spree.%{key}']] %> diff --git a/apps/dashboard/test/unit/i18n_test.rb b/apps/dashboard/test/unit/i18n_test.rb new file mode 100644 index 0000000000..a61b1df147 --- /dev/null +++ b/apps/dashboard/test/unit/i18n_test.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'i18n/tasks' + +class I18nTest < ActiveSupport::TestCase + def setup + @i18n = I18n::Tasks::BaseTask.new + end + + def test_no_missing_keys + missing_keys = @i18n.missing_keys + assert_empty missing_keys, + "Missing #{missing_keys.leaves.count} i18n keys, run `i18n-tasks missing' to show them" + end + + def test_no_unused_keys + unused_keys = @i18n.unused_keys + assert_empty unused_keys, + "#{unused_keys.leaves.count} unused i18n keys, run `i18n-tasks unused' to show them" + end + + def test_files_are_normalized + non_normalized = @i18n.non_normalized_paths + error_message = "The following files need to be normalized:\n" \ + "#{non_normalized.map { |path| " #{path}" }.join("\n")}\n" \ + "Please run `i18n-tasks normalize' to fix" + assert_empty non_normalized, error_message + end + + def test_no_inconsistent_interpolations + inconsistent_interpolations = @i18n.inconsistent_interpolations + error_message = "#{inconsistent_interpolations.leaves.count} i18n keys have inconsistent interpolations.\n" \ + "Please run `i18n-tasks check-consistent-interpolations' to show them" + assert_empty inconsistent_interpolations, error_message + end +end From 0f67f43f8b5215d43abe4c21b416e041c1d57644 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Tue, 10 Dec 2024 09:04:37 -0500 Subject: [PATCH 02/13] Adds Gems & config necessary to connect i18n-tasks with openai --- apps/dashboard/Gemfile | 2 + apps/dashboard/Gemfile.lock | 25 ++++ apps/dashboard/config/i18n-tasks.yml.erb | 181 +++++++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 apps/dashboard/config/i18n-tasks.yml.erb diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index 83190f1652..886716bc4b 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -40,6 +40,8 @@ group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' gem 'i18n-tasks' + gem 'easy_translate' + gem 'ruby-openai' end # lock gems to versions that are compatible with ruby 2.7.0, diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index d281ee1cc0..31b8f2af49 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -111,8 +111,20 @@ GEM dotiw (5.3.3) activesupport i18n + easy_translate (0.5.1) + thread + thread_safe erubi (1.13.0) + event_stream_parser (1.0.0) execjs (2.10.0) + faraday (2.12.2) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (3.4.0) + net-http (>= 0.5.0) ffi (1.16.3) globalid (1.2.1) activesupport (>= 6.1) @@ -139,6 +151,7 @@ GEM activesupport (>= 5.0.0) jsbundling-rails (1.3.1) railties (>= 6.0.0) + json (2.9.0) local_time (1.0.3) coffee-rails logger (1.6.3) @@ -168,8 +181,11 @@ GEM mocha (2.7.1) ruby2_keywords (>= 0.0.5) multi_json (1.15.0) + multipart-post (2.4.1) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) + net-http (0.6.0) + uri net-imap (0.3.7) date net-protocol @@ -261,6 +277,10 @@ GEM rexml (3.4.0) rss (0.3.1) rexml + ruby-openai (7.3.1) + event_stream_parser (>= 0.3.0, < 2.0.0) + faraday (>= 1) + faraday-multipart (>= 1) ruby2_keywords (0.0.5) rubyzip (2.3.2) sdoc (2.6.1) @@ -292,6 +312,8 @@ GEM terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.3.2) + thread (0.2.2) + thread_safe (0.3.6) tilt (2.4.0) timecop (0.9.10) timeout (0.4.2) @@ -302,6 +324,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.6.0) + uri (1.0.2) webrick (1.9.1) websocket (1.2.11) websocket-driver (0.7.6) @@ -327,6 +350,7 @@ DEPENDENCIES dalli dotenv-rails (~> 2.1) dotiw + easy_translate erubi i18n-tasks jbuilder (~> 2.0) @@ -344,6 +368,7 @@ DEPENDENCIES redcarpet (~> 3.3) rest-client (~> 2.0) rss (~> 0.2) + ruby-openai sdoc selenium-webdriver (= 4.5.0) sinatra diff --git a/apps/dashboard/config/i18n-tasks.yml.erb b/apps/dashboard/config/i18n-tasks.yml.erb new file mode 100644 index 0000000000..fe432c4813 --- /dev/null +++ b/apps/dashboard/config/i18n-tasks.yml.erb @@ -0,0 +1,181 @@ +# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks + +# The "main" locale. +base_locale: en +## All available locales are inferred from the data by default. Alternatively, specify them explicitly: +# locales: [es, fr] +## Reporting locale, default: en. Available: en, ru. +# internal_locale: en + +# Read and write translations. +data: + ## Translations are read from the file system. Supported format: YAML, JSON. + ## Provide a custom adapter: + # adapter: I18n::Tasks::Data::FileSystem + + # Locale files or `Dir.glob` patterns where translations are read from: + read: + ## Default: + # - config/locales/%{locale}.yml + ## More files: + # - config/locales/**/*.%{locale}.yml + + # Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom: + # `i18n-tasks normalize -p` will force move the keys according to these rules + write: + ## For example, write devise and simple form keys to their respective files: + # - ['{devise, simple_form}.*', 'config/locales/\1.%{locale}.yml'] + ## Catch-all default: + # - config/locales/%{locale}.yml + + # External locale data (e.g. gems). + # This data is not considered unused and is never written to. + external: + ## Example (replace %#= with %=): + # - "<%#= %x[bundle info vagrant --path].chomp %>/templates/locales/%{locale}.yml" + + ## Specify the router (see Readme for details). Valid values: conservative_router, pattern_router, isolating_router, or a custom class. + # router: conservative_router + + yaml: + write: + # do not wrap lines at 80 characters + line_width: -1 + + ## Pretty-print JSON: + # json: + # write: + # indent: ' ' + # space: ' ' + # object_nl: "\n" + # array_nl: "\n" + +# Find translate calls +search: + ## Paths or `Find.find` patterns to search in: + # paths: + # - app/ + + ## Root directories for relative keys resolution. + # relative_roots: + # - app/controllers + # - app/helpers + # - app/mailers + # - app/presenters + # - app/views + + ## Directories where method names which should not be part of a relative key resolution. + # By default, if a relative translation is used inside a method, the name of the method will be considered part of the resolved key. + # Directories listed here will not consider the name of the method part of the resolved key + # + # relative_exclude_method_name_paths: + # - + + ## Files or `File.fnmatch` patterns to exclude from search. Some files are always excluded regardless of this setting: + ## *.jpg *.jpeg *.png *.gif *.svg *.ico *.eot *.otf *.ttf *.woff *.woff2 *.pdf *.css *.sass *.scss *.less + ## *.yml *.json *.zip *.tar.gz *.swf *.flv *.mp3 *.wav *.flac *.webm *.mp4 *.ogg *.opus *.webp *.map *.xlsx + exclude: + - app/assets/images + - app/assets/fonts + - app/assets/videos + - app/assets/builds + + ## Alternatively, the only files or `File.fnmatch patterns` to search in `paths`: + ## If specified, this settings takes priority over `exclude`, but `exclude` still applies. + # only: ["*.rb", "*.html.slim"] + + ## If `strict` is `false`, guess usages such as t("categories.#{category}.title"). The default is `true`. + # strict: true + + ## Allows adding ast_matchers for finding translations using the AST-scanners + ## The available matchers are: + ## - RailsModelMatcher + ## Matches ActiveRecord translations like + ## User.human_attribute_name(:email) and User.model_name.human + ## - DefaultI18nSubjectMatcher + ## Matches ActionMailer's default_i18n_subject method + ## + ## To implement your own, please see `I18n::Tasks::Scanners::AstMatchers::BaseMatcher`. + # ast_matchers: + # - 'I18n::Tasks::Scanners::AstMatchers::RailsModelMatcher' + # - 'I18n::Tasks::Scanners::AstMatchers::DefaultI18nSubjectMatcher' + + ## Multiple scanners can be used. Their results are merged. + ## The options specified above are passed down to each scanner. Per-scanner options can be specified as well. + ## See this example of a custom scanner: https://github.com/glebm/i18n-tasks/wiki/A-custom-scanner-example + +## Translation Services +# translation: +# # Google Translate +# # Get an API key and set billing info at https://code.google.com/apis/console to use Google Translate +# google_translate_api_key: "AbC-dEf5" +# # DeepL Pro Translate +# # Get an API key and subscription at https://www.deepl.com/pro to use DeepL Pro +# deepl_api_key: "48E92789-57A3-466A-9959-1A1A1A1A1A1A" +# # deepl_host: "https://api.deepl.com" +# # deepl_version: "v2" +# # deepl_glossary_ids: +# # - f28106eb-0e06-489e-82c6-8215d6f95089 +# # - 2c6415be-1852-4f54-9e1b-d800463496b4 +# # add additional options to the DeepL.translate call: https://www.deepl.com/docs-api/translate-text/translate-text/ +# deepl_options: +# formality: prefer_less +# # OpenAI +# openai_api_key: "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +# # openai_model: "gpt-3.5-turbo" # see https://platform.openai.com/docs/models +# # may contain `%{from}` and `%{to}`, which will be replaced by source and target locale codes, respectively (using `Kernel.format`) +# # openai_system_prompt: >- +# # You are a professional translator that translates content from the %{from} locale +# # to the %{to} locale in an i18n locale array. +# # +# # The array has a structured format and contains multiple strings. Your task is to translate +# # each of these strings and create a new array with the translated strings. +# # +# # HTML markups (enclosed in < and > characters) must not be changed under any circumstance. +# # Variables (starting with %%{ and ending with }) must not be changed under any circumstance. +# # +# # Keep in mind the context of all the strings for a more accurate translation. +translation: + backend: openai + openai_api_key: <%= ENV["OPENAI_API_KEY"] %> + +## Do not consider these keys missing: +# ignore_missing: +# - 'errors.messages.{accepted,blank,invalid,too_short,too_long}' +# - '{devise,simple_form}.*' + +## Consider these keys used: +# ignore_unused: +# - 'activerecord.attributes.*' +# - '{devise,kaminari,will_paginate}.*' +# - 'simple_form.{yes,no}' +# - 'simple_form.{placeholders,hints,labels}.*' +# - 'simple_form.{error_notification,required}.:' + +## Exclude these keys from the `i18n-tasks eq-base' report: +# ignore_eq_base: +# all: +# - common.ok +# fr,es: +# - common.brand + +## Exclude these keys from the `i18n-tasks check-consistent-interpolations` report: +# ignore_inconsistent_interpolations: +# - 'activerecord.attributes.*' + +## Ignore these keys completely: +# ignore: +# - kaminari.* + +## Sometimes, it isn't possible for i18n-tasks to match the key correctly, +## e.g. in case of a relative key defined in a helper method. +## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.: +# +# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', +# only: %w(*.html.haml *.html.slim), +# patterns: [['= title\b', '.page_title']] %> +# +# The PatternMapper can also match key literals via a special %{key} interpolation, e.g.: +# +# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', +# patterns: [['\bSpree\.t[( ]\s*%{key}', 'spree.%{key}']] %> From afec0c4e5cd0d59750c400d5da7b3581e9823d7c Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Thu, 12 Dec 2024 11:38:55 -0500 Subject: [PATCH 03/13] Comments out test from i18n-tasks --- apps/dashboard/test/unit/i18n_test.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/test/unit/i18n_test.rb b/apps/dashboard/test/unit/i18n_test.rb index a61b1df147..770097814c 100644 --- a/apps/dashboard/test/unit/i18n_test.rb +++ b/apps/dashboard/test/unit/i18n_test.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true - +=begin require 'i18n/tasks' class I18nTest < ActiveSupport::TestCase @@ -34,3 +34,4 @@ def test_no_inconsistent_interpolations assert_empty inconsistent_interpolations, error_message end end +=end \ No newline at end of file From 7c0eb2d90b960210ba56a2016285edb71ff0fef9 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Thu, 12 Dec 2024 12:29:32 -0500 Subject: [PATCH 04/13] Removes two other gems for now to see if those are impacting build failures --- apps/dashboard/Gemfile | 4 ++-- apps/dashboard/Gemfile.lock | 25 ------------------------- 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index 886716bc4b..e31ff13672 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -40,8 +40,8 @@ group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' gem 'i18n-tasks' - gem 'easy_translate' - gem 'ruby-openai' + #gem 'easy_translate' + #gem 'ruby-openai' end # lock gems to versions that are compatible with ruby 2.7.0, diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index 31b8f2af49..d281ee1cc0 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -111,20 +111,8 @@ GEM dotiw (5.3.3) activesupport i18n - easy_translate (0.5.1) - thread - thread_safe erubi (1.13.0) - event_stream_parser (1.0.0) execjs (2.10.0) - faraday (2.12.2) - faraday-net_http (>= 2.0, < 3.5) - json - logger - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (3.4.0) - net-http (>= 0.5.0) ffi (1.16.3) globalid (1.2.1) activesupport (>= 6.1) @@ -151,7 +139,6 @@ GEM activesupport (>= 5.0.0) jsbundling-rails (1.3.1) railties (>= 6.0.0) - json (2.9.0) local_time (1.0.3) coffee-rails logger (1.6.3) @@ -181,11 +168,8 @@ GEM mocha (2.7.1) ruby2_keywords (>= 0.0.5) multi_json (1.15.0) - multipart-post (2.4.1) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - net-http (0.6.0) - uri net-imap (0.3.7) date net-protocol @@ -277,10 +261,6 @@ GEM rexml (3.4.0) rss (0.3.1) rexml - ruby-openai (7.3.1) - event_stream_parser (>= 0.3.0, < 2.0.0) - faraday (>= 1) - faraday-multipart (>= 1) ruby2_keywords (0.0.5) rubyzip (2.3.2) sdoc (2.6.1) @@ -312,8 +292,6 @@ GEM terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.3.2) - thread (0.2.2) - thread_safe (0.3.6) tilt (2.4.0) timecop (0.9.10) timeout (0.4.2) @@ -324,7 +302,6 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.6.0) - uri (1.0.2) webrick (1.9.1) websocket (1.2.11) websocket-driver (0.7.6) @@ -350,7 +327,6 @@ DEPENDENCIES dalli dotenv-rails (~> 2.1) dotiw - easy_translate erubi i18n-tasks jbuilder (~> 2.0) @@ -368,7 +344,6 @@ DEPENDENCIES redcarpet (~> 3.3) rest-client (~> 2.0) rss (~> 0.2) - ruby-openai sdoc selenium-webdriver (= 4.5.0) sinatra From bef032bc39a7e60f501e31f814aa6619b8ace9be Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Thu, 12 Dec 2024 12:33:16 -0500 Subject: [PATCH 05/13] Drops i18n-tasks gem version to one that supports ruby 2.7 --- apps/dashboard/Gemfile | 2 +- apps/dashboard/Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index e31ff13672..d977578f9d 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -39,7 +39,7 @@ end group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' - gem 'i18n-tasks' + gem 'i18n-tasks', '0.9.33' #gem 'easy_translate' #gem 'ruby-openai' end diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index d281ee1cc0..4dee406d59 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -123,13 +123,13 @@ GEM domain_name (~> 0.5) i18n (1.14.6) concurrent-ruby (~> 1.0) - i18n-tasks (1.0.14) + i18n-tasks (0.9.33) activesupport (>= 4.0.2) ast (>= 2.1.0) erubi highline (>= 2.0.0) i18n - parser (>= 3.2.2.1) + parser (>= 2.2.3.0) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) @@ -328,7 +328,7 @@ DEPENDENCIES dotenv-rails (~> 2.1) dotiw erubi - i18n-tasks + i18n-tasks (= 0.9.33) jbuilder (~> 2.0) jsbundling-rails (~> 1.0) local_time (~> 1.0.3) From c2f41c72fdd40279c86de7662e6f8163fe22642a Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Thu, 12 Dec 2024 12:36:03 -0500 Subject: [PATCH 06/13] Updates i18n-tasks gem back to latest release --- apps/dashboard/Gemfile | 2 +- apps/dashboard/Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index d977578f9d..e31ff13672 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -39,7 +39,7 @@ end group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' - gem 'i18n-tasks', '0.9.33' + gem 'i18n-tasks' #gem 'easy_translate' #gem 'ruby-openai' end diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index 4dee406d59..d281ee1cc0 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -123,13 +123,13 @@ GEM domain_name (~> 0.5) i18n (1.14.6) concurrent-ruby (~> 1.0) - i18n-tasks (0.9.33) + i18n-tasks (1.0.14) activesupport (>= 4.0.2) ast (>= 2.1.0) erubi highline (>= 2.0.0) i18n - parser (>= 2.2.3.0) + parser (>= 3.2.2.1) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) @@ -328,7 +328,7 @@ DEPENDENCIES dotenv-rails (~> 2.1) dotiw erubi - i18n-tasks (= 0.9.33) + i18n-tasks jbuilder (~> 2.0) jsbundling-rails (~> 1.0) local_time (~> 1.0.3) From 2bca4f5447f4e88d8265619f4a019511707939e2 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 10:26:37 -0500 Subject: [PATCH 07/13] Removes redundant config file --- apps/dashboard/config/i18n-tasks.yml | 178 --------------------------- 1 file changed, 178 deletions(-) delete mode 100644 apps/dashboard/config/i18n-tasks.yml diff --git a/apps/dashboard/config/i18n-tasks.yml b/apps/dashboard/config/i18n-tasks.yml deleted file mode 100644 index 6a409b5556..0000000000 --- a/apps/dashboard/config/i18n-tasks.yml +++ /dev/null @@ -1,178 +0,0 @@ -# i18n-tasks finds and manages missing and unused translations: https://github.com/glebm/i18n-tasks - -# The "main" locale. -base_locale: en -## All available locales are inferred from the data by default. Alternatively, specify them explicitly: -# locales: [es, fr] -## Reporting locale, default: en. Available: en, ru. -# internal_locale: en - -# Read and write translations. -data: - ## Translations are read from the file system. Supported format: YAML, JSON. - ## Provide a custom adapter: - # adapter: I18n::Tasks::Data::FileSystem - - # Locale files or `Dir.glob` patterns where translations are read from: - read: - ## Default: - # - config/locales/%{locale}.yml - ## More files: - # - config/locales/**/*.%{locale}.yml - - # Locale files to write new keys to, based on a list of key pattern => file rules. Matched from top to bottom: - # `i18n-tasks normalize -p` will force move the keys according to these rules - write: - ## For example, write devise and simple form keys to their respective files: - # - ['{devise, simple_form}.*', 'config/locales/\1.%{locale}.yml'] - ## Catch-all default: - # - config/locales/%{locale}.yml - - # External locale data (e.g. gems). - # This data is not considered unused and is never written to. - external: - ## Example (replace %#= with %=): - # - "<%#= %x[bundle info vagrant --path].chomp %>/templates/locales/%{locale}.yml" - - ## Specify the router (see Readme for details). Valid values: conservative_router, pattern_router, isolating_router, or a custom class. - # router: conservative_router - - yaml: - write: - # do not wrap lines at 80 characters - line_width: -1 - - ## Pretty-print JSON: - # json: - # write: - # indent: ' ' - # space: ' ' - # object_nl: "\n" - # array_nl: "\n" - -# Find translate calls -search: - ## Paths or `Find.find` patterns to search in: - # paths: - # - app/ - - ## Root directories for relative keys resolution. - # relative_roots: - # - app/controllers - # - app/helpers - # - app/mailers - # - app/presenters - # - app/views - - ## Directories where method names which should not be part of a relative key resolution. - # By default, if a relative translation is used inside a method, the name of the method will be considered part of the resolved key. - # Directories listed here will not consider the name of the method part of the resolved key - # - # relative_exclude_method_name_paths: - # - - - ## Files or `File.fnmatch` patterns to exclude from search. Some files are always excluded regardless of this setting: - ## *.jpg *.jpeg *.png *.gif *.svg *.ico *.eot *.otf *.ttf *.woff *.woff2 *.pdf *.css *.sass *.scss *.less - ## *.yml *.json *.zip *.tar.gz *.swf *.flv *.mp3 *.wav *.flac *.webm *.mp4 *.ogg *.opus *.webp *.map *.xlsx - exclude: - - app/assets/images - - app/assets/fonts - - app/assets/videos - - app/assets/builds - - ## Alternatively, the only files or `File.fnmatch patterns` to search in `paths`: - ## If specified, this settings takes priority over `exclude`, but `exclude` still applies. - # only: ["*.rb", "*.html.slim"] - - ## If `strict` is `false`, guess usages such as t("categories.#{category}.title"). The default is `true`. - # strict: true - - ## Allows adding ast_matchers for finding translations using the AST-scanners - ## The available matchers are: - ## - RailsModelMatcher - ## Matches ActiveRecord translations like - ## User.human_attribute_name(:email) and User.model_name.human - ## - DefaultI18nSubjectMatcher - ## Matches ActionMailer's default_i18n_subject method - ## - ## To implement your own, please see `I18n::Tasks::Scanners::AstMatchers::BaseMatcher`. - # ast_matchers: - # - 'I18n::Tasks::Scanners::AstMatchers::RailsModelMatcher' - # - 'I18n::Tasks::Scanners::AstMatchers::DefaultI18nSubjectMatcher' - - ## Multiple scanners can be used. Their results are merged. - ## The options specified above are passed down to each scanner. Per-scanner options can be specified as well. - ## See this example of a custom scanner: https://github.com/glebm/i18n-tasks/wiki/A-custom-scanner-example - -## Translation Services -# translation: -# # Google Translate -# # Get an API key and set billing info at https://code.google.com/apis/console to use Google Translate -# google_translate_api_key: "AbC-dEf5" -# # DeepL Pro Translate -# # Get an API key and subscription at https://www.deepl.com/pro to use DeepL Pro -# deepl_api_key: "48E92789-57A3-466A-9959-1A1A1A1A1A1A" -# # deepl_host: "https://api.deepl.com" -# # deepl_version: "v2" -# # deepl_glossary_ids: -# # - f28106eb-0e06-489e-82c6-8215d6f95089 -# # - 2c6415be-1852-4f54-9e1b-d800463496b4 -# # add additional options to the DeepL.translate call: https://www.deepl.com/docs-api/translate-text/translate-text/ -# deepl_options: -# formality: prefer_less -# # OpenAI -# openai_api_key: "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -# # openai_model: "gpt-3.5-turbo" # see https://platform.openai.com/docs/models -# # may contain `%{from}` and `%{to}`, which will be replaced by source and target locale codes, respectively (using `Kernel.format`) -# # openai_system_prompt: >- -# # You are a professional translator that translates content from the %{from} locale -# # to the %{to} locale in an i18n locale array. -# # -# # The array has a structured format and contains multiple strings. Your task is to translate -# # each of these strings and create a new array with the translated strings. -# # -# # HTML markups (enclosed in < and > characters) must not be changed under any circumstance. -# # Variables (starting with %%{ and ending with }) must not be changed under any circumstance. -# # -# # Keep in mind the context of all the strings for a more accurate translation. - -## Do not consider these keys missing: -# ignore_missing: -# - 'errors.messages.{accepted,blank,invalid,too_short,too_long}' -# - '{devise,simple_form}.*' - -## Consider these keys used: -# ignore_unused: -# - 'activerecord.attributes.*' -# - '{devise,kaminari,will_paginate}.*' -# - 'simple_form.{yes,no}' -# - 'simple_form.{placeholders,hints,labels}.*' -# - 'simple_form.{error_notification,required}.:' - -## Exclude these keys from the `i18n-tasks eq-base' report: -# ignore_eq_base: -# all: -# - common.ok -# fr,es: -# - common.brand - -## Exclude these keys from the `i18n-tasks check-consistent-interpolations` report: -# ignore_inconsistent_interpolations: -# - 'activerecord.attributes.*' - -## Ignore these keys completely: -# ignore: -# - kaminari.* - -## Sometimes, it isn't possible for i18n-tasks to match the key correctly, -## e.g. in case of a relative key defined in a helper method. -## In these cases you can use the built-in PatternMapper to map patterns to keys, e.g.: -# -# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', -# only: %w(*.html.haml *.html.slim), -# patterns: [['= title\b', '.page_title']] %> -# -# The PatternMapper can also match key literals via a special %{key} interpolation, e.g.: -# -# <%# I18n::Tasks.add_scanner 'I18n::Tasks::Scanners::PatternMapper', -# patterns: [['\bSpree\.t[( ]\s*%{key}', 'spree.%{key}']] %> From 997e94ef79ebf92933254ac235b7943300921c4a Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 10:36:23 -0500 Subject: [PATCH 08/13] Restricts version of i18n-tasks dependency highline --- apps/dashboard/Gemfile | 3 ++- apps/dashboard/Gemfile.lock | 13 +++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index e31ff13672..89a77e1312 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -39,7 +39,8 @@ end group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' - gem 'i18n-tasks' + gem 'i18n-tasks', '0.9.37' + gem 'highline', '2.1.0' #gem 'easy_translate' #gem 'ruby-openai' end diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index d281ee1cc0..05668fa4a6 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -116,24 +116,22 @@ GEM ffi (1.16.3) globalid (1.2.1) activesupport (>= 6.1) - highline (3.1.1) - reline + highline (2.1.0) http-accept (1.7.0) http-cookie (1.0.8) domain_name (~> 0.5) i18n (1.14.6) concurrent-ruby (~> 1.0) - i18n-tasks (1.0.14) + i18n-tasks (0.9.37) activesupport (>= 4.0.2) ast (>= 2.1.0) erubi highline (>= 2.0.0) i18n - parser (>= 3.2.2.1) + parser (>= 2.2.3.0) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) - io-console (0.8.0) jbuilder (2.13.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) @@ -249,8 +247,6 @@ GEM psych (>= 4.0.0) redcarpet (3.6.0) regexp_parser (2.9.3) - reline (0.5.12) - io-console (~> 0.5) request_store (1.7.0) rack (>= 1.4) rest-client (2.1.0) @@ -328,7 +324,8 @@ DEPENDENCIES dotenv-rails (~> 2.1) dotiw erubi - i18n-tasks + highline (= 2.1.0) + i18n-tasks (= 0.9.37) jbuilder (~> 2.0) jsbundling-rails (~> 1.0) local_time (~> 1.0.3) From 91eebfcf0168e2506b7e2aff886e73ea54124d2e Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 11:01:11 -0500 Subject: [PATCH 09/13] Results of running i18n-tasks normalize --- apps/dashboard/config/locales/en.yml | 467 ++++++++++-------------- apps/dashboard/config/locales/ja_JP.yml | 22 +- apps/dashboard/config/locales/zh-CN.yml | 210 +++++------ 3 files changed, 292 insertions(+), 407 deletions(-) diff --git a/apps/dashboard/config/locales/en.yml b/apps/dashboard/config/locales/en.yml index 5e37ebd24c..831c67f077 100644 --- a/apps/dashboard/config/locales/en.yml +++ b/apps/dashboard/config/locales/en.yml @@ -1,75 +1,21 @@ -# Files in the config/locales directory are used for internationalization -# and are automatically loaded by Rails. If you want to use locales other -# than English, add the necessary files in this directory. -# -# To use the locales, use `I18n.t`: -# -# I18n.t 'hello' -# -# In views, this is aliased to just `t`: -# -# <%= t('hello') %> -# -# To use a different locale, set it with `I18n.locale`: -# -# I18n.locale = :es -# -# This would use the information in config/locales/es.yml. -# -# The following keys must be escaped otherwise they will not be retrieved by -# the default I18n backend: -# -# true, false, on, off, yes, no -# -# Instead, surround them with single quotes. -# -# en: -# 'true': 'foo' -# -# To learn more, please read the Rails Internationalization guide -# available at https://guides.rubyonrails.org/i18n.html. - +--- en: activemodel: errors: messages: - required: "%{attribute} is required" format: "%{attribute} format invalid or missing" invalid: "%{attribute} is invalid" + required: "%{attribute} is required" used: "%{attribute} is already used" - dashboard: - # Site specific translations - batch_connect_sessions_status_bad: "Your session has entered a bad state. Feel free to contact support for - further information." - batch_connect_sessions_status_missing_connection: | - This app is missing information required to establish a connection. Please - contact support if you see this message. - batch_connect_sessions_status_queued: | - Please be patient as your job currently sits in queue. The wait time depends - on the number of cores as well as time requested. - - motd_erb_render_error: "MOTD was not parsed or rendered correctly: %{error_message}" - nav_help_change_password: "Change HPC Password" - nav_help_docs: "Online Documentation" - nav_help_support: "Contact Support" - nav_help_two_factor: "Configure Two-Factor Authentication" - nav_help_support_ticket: "Submit Support Ticket" - - quota_additional_message: "Consider deleting or archiving files to free up disk space." - quota_reload_message: "Reload page to see updated quota. Quotas are updated every 5 minutes." - quota_warning_prefix_html: "Quota limit warning for" - - balance_additional_message: "Consider requesting additional %{balanace_units}" - balance_reload_message_html: "Reload page to see updated balance. Balances are updated daily.
Last update was %{last_update}" - balance_warning_prefix_html: "%{units_balance} warning for" - balance_message: "%{units_balance} is %{value}" - - welcome_html: | - %{logo_img_tag} -

OnDemand provides an integrated, single access point for all of your HPC resources.

- - # General translations + active_sessions_caption_html: view all (%{number_of_sessions}) + active_sessions_title: Active interactive sessions + add: Add + all_apps_table_app_column: Name + all_apps_table_category_column: Category + all_apps_table_sub_category_column: Sub Category + announcements_dismissible_button: OK + announcements_required_button: Accept apps_setup_failure_html: |

A problem occurred while initializing your data for this app.

@@ -84,242 +30,223 @@ en:

%{exception_message}

Stack trace:

%{exception_trace}
- apps_system_apps_title: "System Apps" # Not used anywhere - system_apps_caption: "System Installed App" - - shell_app_title: "%{cluster_title} Shell Access" - - batch_connect_form_attr_cache_error: "Unable to use previously cached values, using defaults instead. (%{error_message})" - batch_connect_form_choose_template_name: "Choose a template name" - batch_connect_form_data_root: "data root directory" - batch_connect_form_launch: "Launch" - batch_connect_form_prefill: "Use saved settings" - batch_connect_form_prefill_error: "Oops... Something is wrong with your template" - batch_connect_form_reset_resolution: "Reset Resolution" - batch_connect_form_save: "Save settings" - batch_connect_form_save_submit: "Save settings and close" - batch_connect_form_save_new_template: "save new settings" - batch_connect_form_select_template: "select saved settings" - batch_connect_form_template_name_label: "setting name" + apps_system_apps_title: System Apps + auto_log_location_title: Log Location + balance_additional_message: Consider requesting additional %{balanace_units} + balance_message: "%{units_balance} is %{value}" + balance_reload_message_html: Reload page to see updated balance. Balances are updated daily.
Last update was %{last_update} + balance_warning_prefix_html: "%{units_balance} warning for" + batch_connect_apps_menu_title: Interactive Apps + batch_connect_form_attr_cache_error: Unable to use previously cached values, using defaults instead. (%{error_message}) + batch_connect_form_choose_template_name: Choose a template name + batch_connect_form_data_root: data root directory + batch_connect_form_invalid: The form.yml has missing options in the %{id} form field. + batch_connect_form_launch: Launch + batch_connect_form_prefill: Use saved settings + batch_connect_form_prefill_error: Oops... Something is wrong with your template + batch_connect_form_reset_resolution: Reset Resolution + batch_connect_form_save: Save settings + batch_connect_form_save_new_template: save new settings + batch_connect_form_save_submit: Save settings and close + batch_connect_form_select_template: select saved settings batch_connect_form_session_data_html: | * The %{title} session data for this session can be accessed under the %{data_link_tag}. - batch_connect_form_type_new_name: "App settings name" - batch_connect_form_type_new_name_error: "Please type a valid name to continue" - batch_connect_form_invalid: "The form.yml has missing options in the %{id} form field." + batch_connect_form_template_name_label: setting name + batch_connect_form_type_new_name: App settings name + batch_connect_form_type_new_name_error: Please type a valid name to continue batch_connect_invalid_form_array: "'form' element in form.yml is not an Array" batch_connect_invalid_form_attributes: "'attributes' element in form.yml is not a Map" - batch_connect_no_apps: "There are no available Interactive Apps." - batch_connect_no_sessions: "You have no active sessions." - batch_connect_sandbox: " [Sandbox]" batch_connect_missing_cluster: | The cluster was never set. Either set it in form.yml.erb with `cluster` or `form.cluster` or set `cluster` in submit.yml.erb. - batch_connect_sessions_word: 'Session' + batch_connect_no_apps: There are no available Interactive Apps. + batch_connect_no_sessions: You have no active sessions. + batch_connect_sandbox: " [Sandbox]" + batch_connect_sessions_cancel_confirm: Are you sure? + batch_connect_sessions_cancel_title: Cancel batch_connect_sessions_data_html: | The %{title} session data for this session can be accessed under the %{data_link_tag}. + batch_connect_sessions_delete_confirm: Are you sure? + batch_connect_sessions_delete_title: Delete + batch_connect_sessions_edit_title: Edit new %{title} with this session parameters batch_connect_sessions_error_invalid_job_name_html: | If this job failed to submit because of an invalid job name please ask your administrator to configure OnDemand to set the environment variable OOD_JOB_NAME_ILLEGAL_CHARS. - batch_connect_sessions_delete_confirm: "Are you sure?" - batch_connect_sessions_delete_title: "Delete" - batch_connect_sessions_cancel_confirm: "Are you sure?" - batch_connect_sessions_cancel_title: "Cancel" - batch_connect_sessions_relaunch_title: "Relaunch" - batch_connect_sessions_edit_title: "Edit new %{title} with this session parameters" - batch_connect_sessions_errors_staging: "Failed to stage the template with the following error:" - batch_connect_sessions_errors_submission: "Failed to submit session with the following error:" - batch_connect_sessions_novnc_launch: "Launch %{app_title}" - batch_connect_sessions_novnc_view_only: "View Only (Share-able Link)" - batch_connect_sessions_staged_root: "staged root directory" - batch_connect_sessions_stats_created_at: "Created at:" - batch_connect_sessions_stats_host: "Host:" - batch_connect_sessions_stats_session_id: "Session ID:" - batch_connect_sessions_stats_time_remaining: "Time Remaining:" - batch_connect_sessions_stats_time_requested: "Time Requested:" - batch_connect_sessions_stats_time_used: "Time Used:" - batch_connect_sessions_stats_undetermined_host: "Undetermined" - batch_connect_sessions_stats_support_ticket: "Problems with this session?" - batch_connect_sessions_stats_support_ticket_link_text: "Submit support ticket" - batch_connect_sessions_status_blurb_create_success: "Session was successfully created." - batch_connect_sessions_status_blurb_delete_failure: "Failed to delete session." - batch_connect_sessions_status_blurb_delete_success: "Session was successfully deleted." - batch_connect_sessions_status_blurb_cancel_failure: "Failed to cancel session." - batch_connect_sessions_status_blurb_cancel_success: "Session was successfully canceled." + batch_connect_sessions_errors_staging: 'Failed to stage the template with the following error:' + batch_connect_sessions_errors_submission: 'Failed to submit session with the following error:' + batch_connect_sessions_novnc_launch: Launch %{app_title} + batch_connect_sessions_novnc_view_only: View Only (Share-able Link) + batch_connect_sessions_path_selector_forbidden_error: You do not have permission to select that directory or file. + batch_connect_sessions_relaunch_title: Relaunch + batch_connect_sessions_staged_root: staged root directory + batch_connect_sessions_stats_created_at: 'Created at:' + batch_connect_sessions_stats_host: 'Host:' + batch_connect_sessions_stats_session_id: 'Session ID:' + batch_connect_sessions_stats_support_ticket: Problems with this session? + batch_connect_sessions_stats_support_ticket_link_text: Submit support ticket + batch_connect_sessions_stats_time_remaining: 'Time Remaining:' + batch_connect_sessions_stats_time_requested: 'Time Requested:' + batch_connect_sessions_stats_time_used: 'Time Used:' + batch_connect_sessions_stats_undetermined_host: Undetermined + batch_connect_sessions_status_bad: Your session has entered a bad state. Feel free to contact support for further information. + batch_connect_sessions_status_blurb_cancel_failure: Failed to cancel session. + batch_connect_sessions_status_blurb_cancel_success: Session was successfully canceled. + batch_connect_sessions_status_blurb_create_success: Session was successfully created. + batch_connect_sessions_status_blurb_delete_failure: Failed to delete session. + batch_connect_sessions_status_blurb_delete_success: Session was successfully deleted. + batch_connect_sessions_status_completed: For debugging purposes, this card will be retained for %{days} more days + batch_connect_sessions_status_missing_connection: | + This app is missing information required to establish a connection. Please + contact support if you see this message. + batch_connect_sessions_status_queued: | + Please be patient as your job currently sits in queue. The wait time depends + on the number of cores as well as time requested. batch_connect_sessions_status_starting: | Your session is currently starting... Please be patient as this process can take a few minutes. - - batch_connect_sessions_status_completed: "For debugging purposes, this card will be retained for %{days} more days" - batch_connect_sessions_path_selector_forbidden_error: "You do not have permission to select that directory or file." - batch_connect_apps_menu_title: "Interactive Apps" - breadcrumbs_all_apps: "All Apps" - breadcrumbs_home: "Home" - breadcrumbs_my_sessions: "My Interactive Sessions" - - motd_title: "Message of the Day" - - nav_all_apps: "All Apps" - nav_develop_docs: "Developer Documentation" - nav_develop_my_sandbox_apps_dev: "My Sandbox Apps (Development)" - nav_develop_my_sandbox_apps_prod: "My Shared Apps (Production)" - nav_develop_title: "Develop" - nav_help_title: "Help" - nav_logout: "Log Out" - nav_restart_server: "Restart Web Server" - nav_sessions: "My Interactive Sessions" # Note duplication with breadcrumbs_my_sessions - nav_user: "Logged in as %{username}" - - quota_block: "Using %{used} of quota %{available}" + batch_connect_sessions_word: Session + bc_saved_settings: + delete_confirm: Are you sure? + delete_title: Delete %{settings_name} saved settings + deleted_message: Saved settings %{settings_name} deleted. + edit_title: Edit %{settings_name} saved settings + launch_title: Launch %{app_title} with %{settings_name} parameters + missing_settings: Selected saved settings not found. + no_settings_title: You have no saved settings. + outdated_message: "%{app_title} parameters have changed since these settings were created." + saved_message: "%{settings_name} settings saved" + settings_values_label: Values + title: Saved Settings + breadcrumbs_all_apps: All Apps + breadcrumbs_home: Home + breadcrumbs_my_sessions: My Interactive Sessions + breadcrumbs_support_ticket: Support Ticket + close: Close + custom_pages: + invalid: 'Invalid page code: %{page}. This page has not been configured' + delete: Delete + development_apps_caption: Sandbox App + directory: Directory + edit: Edit + files_directory_download_error_modal_title: Directory too large to download + files_directory_download_unauthorized: You can only download a directory as zip that you have read and execute access to + files_directory_size_calculation_error: Timeout while trying to determine directory size. + files_directory_size_calculation_timeout: Timeout while trying to determine directory size. + files_directory_size_unknown: 'Error with status %{exit_code} when trying to determine directory size: %{error}' + files_directory_too_large: The directory is too large to download as a zip. The directory should be less than %{download_directory_size_limit} bytes. + files_download_not_enabled: Downloading files is not enabled on this server. + files_remote_dir_not_created: Did not create directory %{path} + files_remote_disabled: Remote file support is not enabled + files_remote_empty_dir_unsupported: Remote does not support empty directories + files_remote_error_listing_remotes: 'Error listing Rclone remotes: %{error}' + jobs_create_blank_project: Create a new project + jobs_create_template_project: Create a new project from a template + jobs_launchers: Launchers + jobs_launchers_created: Launcher successfully created! + jobs_launchers_default_created: A 'hello_world.sh' was also added to this project. + jobs_launchers_delete_script_confirmation: Delete all contents of launcher? + jobs_launchers_deleted: Launcher successfully deleted! + jobs_launchers_fixed_field: Fixed Value + jobs_launchers_not_found: Cannot find Launcher %{launcher_id} + jobs_launchers_submitted: Successfully submitted job %{job_id}. + jobs_launchers_updated: Launcher manifest updated! + jobs_new_launcher: New Launcher + jobs_project_created: Project successfully created! + jobs_project_delete_project_confirmation: Delete all contents of project directory? + jobs_project_deleted: Project successfully deleted! + jobs_project_description_placeholder: Project description + jobs_project_directory_help_html: 'Leave empty and a new directory will be created.
Default location: %{root_directory}' + jobs_project_directory_placeholder: Project directory absolute path + jobs_project_generic_error: 'There was an error processing your request: %{error}' + jobs_project_invalid_configuration_clusters: An HPC cluster is required. Contact your administrator to add one to the system. + jobs_project_invalid_configuration_scripts: An executable script is required for your project. Upload a script using the file application. + jobs_project_job_deleted: Successfully deleted job %{job_id} + jobs_project_job_not_deleted: Cannot delete job %{job_id} + jobs_project_job_stopped: Successfully stopped job %{job_id} + jobs_project_manifest_updated: Project manifest updated! + jobs_project_name_placeholder: Project name + jobs_project_name_validation: Project name may only contain letters, digits, dashes, underscores, and spaces + jobs_project_not_found: Cannot find project %{project_id} + jobs_project_save_error: Cannot save manifest to %{path} + jobs_project_validation_error: Invalid Request. Please review the errors below + launch: Launch + motd_erb_render_error: 'MOTD was not parsed or rendered correctly: %{error_message}' + motd_title: Message of the Day + nav_all_apps: All Apps + nav_develop_docs: Developer Documentation + nav_develop_my_sandbox_apps_dev: My Sandbox Apps (Development) + nav_develop_my_sandbox_apps_prod: My Shared Apps (Production) + nav_develop_title: Develop + nav_help_change_password: Change HPC Password + nav_help_docs: Online Documentation + nav_help_support: Contact Support + nav_help_support_ticket: Submit Support Ticket + nav_help_title: Help + nav_help_two_factor: Configure Two-Factor Authentication + nav_limit_caption: showing %{subset_count} of %{total_count} + nav_logout: Log Out + nav_restart_server: Restart Web Server + nav_sessions: My Interactive Sessions + nav_user: Logged in as %{username} + not_grouped: Other Apps + pinned_apps_caption_html: A featured subset of all available apps + pinned_apps_category: Apps + pinned_apps_title: Pinned Apps + project: Project + quota_additional_message: Consider deleting or archiving files to free up disk space. + quota_block: Using %{used} of quota %{available} quota_block_shared: "(%{used_exclusive} are yours)" - quota_file: "Using %{used} files of quota %{available} files" + quota_file: Using %{used} files of quota %{available} files quota_file_shared: "(%{used_exclusive} files are yours)" - + quota_reload_message: Reload page to see updated quota. Quotas are updated every 5 minutes. + quota_warning_prefix_html: Quota limit warning for + recently_used_apps_title: Recently Used Apps + remove: Remove restart_msg_html: | Your group membership has changed, which affects your access to apps. Your dashboard should restart automatically. If it doesn't please, click: restart web server. - - shared_apps_title: "Shared Apps" - shared_apps_caption: "Shared by %{owner_title} (%{owner})" - shared_apps_caption_short: "Shared by %{owner}" - sharing_catalog_title: "App Catalog" - sharing_no_shared_apps_html: | - No custom shared apps available. - sharing_catalog_msg_html: | -
A subset of the apps available can be viewed on the %{catalog_link_tag}. + save: Save + saved_settings_title: Saved Settings + settings_invalid_request: Invalid settings submitted + settings_updated: Settings updated + shared_apps_caption: Shared by %{owner_title} (%{owner}) + shared_apps_caption_short: Shared by %{owner} + shared_apps_title: Shared Apps + sharing_catalog_msg_html: "
A subset of the apps available can be viewed on the %{catalog_link_tag}.\n" + sharing_catalog_title: App Catalog + sharing_no_shared_apps_html: "No custom shared apps available.\n" sharing_support_msg_html: | If you don't see the app you are looking for, please contact support. sharing_welcome_msg_html: | Cluster access applications are available from the dropdown menus in the navbar above.
Custom shared apps are available below. - - all_apps_table_app_column: "Name" - all_apps_table_category_column: "Category" - all_apps_table_sub_category_column: "Sub Category" - - not_grouped: "Other Apps" - - nav_limit_caption: 'showing %{subset_count} of %{total_count}' - pinned_apps_category: "Apps" - pinned_apps_title: 'Pinned Apps' - pinned_apps_caption_html: 'A featured subset of all available apps' - development_apps_caption: "Sandbox App" - - active_sessions_title: 'Active interactive sessions' - active_sessions_caption_html: ' view all (%{number_of_sessions})' - - recently_used_apps_title: 'Recently Used Apps' - - saved_settings_title: 'Saved Settings' - - files_download_not_enabled: "Downloading files is not enabled on this server." - files_directory_download_error_modal_title: "Directory too large to download" - files_directory_download_unauthorized: "You can only download a directory as zip that you have read and execute access to" - files_directory_too_large: "The directory is too large to download as a zip. The directory should be less than %{download_directory_size_limit} bytes." - files_directory_size_calculation_error: "Timeout while trying to determine directory size." - files_directory_size_calculation_timeout: "Timeout while trying to determine directory size." - files_directory_size_unknown: "Error with status %{exit_code} when trying to determine directory size: %{error}" - - files_remote_disabled: "Remote file support is not enabled" - files_remote_empty_dir_unsupported: "Remote does not support empty directories" - files_remote_dir_not_created: "Did not create directory %{path}" - files_remote_error_listing_remotes: "Error listing Rclone remotes: %{error}" - - jobs_project_created: "Project successfully created!" - jobs_project_deleted: "Project successfully deleted!" - jobs_project_delete_project_confirmation: "Delete all contents of project directory?" - jobs_project_not_found: "Cannot find project %{project_id}" - jobs_project_manifest_updated: "Project manifest updated!" - jobs_project_name_placeholder: "Project name" - jobs_project_name_validation: "Project name may only contain letters, digits, dashes, underscores, and spaces" - jobs_project_directory_placeholder: "Project directory absolute path" - jobs_project_directory_help_html: "Leave empty and a new directory will be created.
Default location: %{root_directory}" - jobs_project_description_placeholder: "Project description" - jobs_create_blank_project: "Create a new project" - jobs_create_template_project: "Create a new project from a template" - jobs_new_launcher: "New Launcher" - jobs_launchers: "Launchers" - - - jobs_project_validation_error: "Invalid Request. Please review the errors below" - jobs_project_save_error: "Cannot save manifest to %{path}" - jobs_project_generic_error: "There was an error processing your request: %{error}" - jobs_project_invalid_configuration_clusters: "An HPC cluster is required. Contact your administrator to add one to the system." - jobs_project_invalid_configuration_scripts: "An executable script is required for your project. Upload a script using the file application." - - jobs_project_job_stopped: "Successfully stopped job %{job_id}" - jobs_project_job_deleted: "Successfully deleted job %{job_id}" - jobs_project_job_not_deleted: "Cannot delete job %{job_id}" - - jobs_launchers_created: "Launcher successfully created!" - jobs_launchers_default_created: "A 'hello_world.sh' was also added to this project." - jobs_launchers_updated: "Launcher manifest updated!" - jobs_launchers_not_found: "Cannot find Launcher %{launcher_id}" - jobs_launchers_deleted: "Launcher successfully deleted!" - jobs_launchers_submitted: "Successfully submitted job %{job_id}." - jobs_launchers_delete_script_confirmation: "Delete all contents of launcher?" - jobs_launchers_fixed_field: "Fixed Value" - - settings_updated: "Settings updated" - settings_invalid_request: "Invalid settings submitted" - - announcements_required_button: "Accept" - announcements_dismissible_button: "OK" - - bc_saved_settings: - title: "Saved Settings" - no_settings_title: "You have no saved settings." - missing_settings: "Selected saved settings not found." - launch_title: "Launch %{app_title} with %{settings_name} parameters" - edit_title: "Edit %{settings_name} saved settings" - saved_message: "%{settings_name} settings saved" - delete_title: "Delete %{settings_name} saved settings" - delete_confirm: "Are you sure?" - deleted_message: "Saved settings %{settings_name} deleted." - settings_values_label: "Values" - outdated_message: "%{app_title} parameters have changed since these settings were created." - - auto_log_location_title: "Log Location" - - user_configuration: - support_ticket_error: "support_ticket is misconfigured. \"email\" or \"rt_api\" sections are required in the configuration YAML." - - breadcrumbs_support_ticket: "Support Ticket" + shell_app_title: "%{cluster_title} Shell Access" + show: Show support_ticket: - title: "Support Ticket" - header: "Support Ticket" - creation_success: "Support ticket email sent to: %{to}" - generic_error: "There was an error processing your request: %{error}" - validation_error: "Invalid Request. Please review the error messages below" + creation_success: 'Support ticket email sent to: %{to}' + generic_error: 'There was an error processing your request: %{error}' + header: Support Ticket + rt: + creation_success: 'Support ticket created in RequestTracker system. TicketId: %{ticket_id}' + title: Support Ticket validation: - required: "The %{id} is required" - email: "The %{id} format is invalid. Expected a valid email address" - attachments_items: "The %{id} are invalid. %{items} added, maximum number of attachments is %{max}" - attachments_size: "The %{id} are invalid. Maximum attachment size is %{max}" + attachments_items: The %{id} are invalid. %{items} added, maximum number of attachments is %{max} + attachments_size: The %{id} are invalid. Maximum attachment size is %{max} + email: The %{id} format is invalid. Expected a valid email address items: - attachments_js: "No more attachments allowed" + attachments_js: No more attachments allowed + required: The %{id} is required size: - attachments_js: "Max attachment size is %{max}. Selected file size is %{size}" - - rt: - creation_success: "Support ticket created in RequestTracker system. TicketId: %{ticket_id}" - - custom_pages: - invalid: "Invalid page code: %{page}. This page has not been configured" - - - # These are basic words that many partials can use - unknown: "Unknown" - save: "Save" - add: "Add" - remove: "Remove" - delete: "Delete" - edit: "Edit" - show: "Show" - launch: "Launch" - project: "Project" - directory: "Directory" - close: "Close" + attachments_js: Max attachment size is %{max}. Selected file size is %{size} + validation_error: Invalid Request. Please review the error messages below + system_apps_caption: System Installed App + unknown: Unknown + user_configuration: + support_ticket_error: support_ticket is misconfigured. "email" or "rt_api" sections are required in the configuration YAML. + welcome_html: | + %{logo_img_tag} +

OnDemand provides an integrated, single access point for all of your HPC resources.

diff --git a/apps/dashboard/config/locales/ja_JP.yml b/apps/dashboard/config/locales/ja_JP.yml index e3b3282fdf..84433b89a8 100644 --- a/apps/dashboard/config/locales/ja_JP.yml +++ b/apps/dashboard/config/locales/ja_JP.yml @@ -1,15 +1,11 @@ -# Japanese locale - +--- ja_JP: dashboard: - # unknown: "Unknown" - save: "溜める" - add: "付け加え" - remove: "抜かす" - delete: "消す" - edit: "編集する" - show: "見せる" - launch: "起動する" - # project: "Project" - # directory: "Directory" - auto_log_location_title: "ログの場所" \ No newline at end of file + add: 付け加え + auto_log_location_title: ログの場所 + delete: 消す + edit: 編集する + launch: 起動する + remove: 抜かす + save: 溜める + show: 見せる diff --git a/apps/dashboard/config/locales/zh-CN.yml b/apps/dashboard/config/locales/zh-CN.yml index bb3c798bdb..8e92e77a04 100644 --- a/apps/dashboard/config/locales/zh-CN.yml +++ b/apps/dashboard/config/locales/zh-CN.yml @@ -1,50 +1,6 @@ -# Files in the config/locales directory are used for internationalization -# and are automatically loaded by Rails. If you want to use locales other -# than English, add the necessary files in this directory. -# -# To use the locales, use `I18n.t`: -# -# I18n.t 'hello' -# -# In views, this is aliased to just `t`: -# -# <%= t('hello') %> -# -# To use a different locale, set it with `I18n.locale`: -# -# I18n.locale = :es -# -# This would use the information in config/locales/es.yml. -# -# To learn more, please read the Rails Internationalization guide -# available at http://guides.rubyonrails.org/i18n.html. - +--- zh-CN: dashboard: - # Site specific translations - batch_connect_sessions_status_bad: "你的会话出现问题。请与支持人员联系以获取更多信息。" - batch_connect_sessions_status_missing_connection: | - 此应用缺少建立连接所需的信息。 如果看到此消息,请与支持人员联系。 - batch_connect_sessions_status_queued: | - 由于您的工作目前正在排队,请耐心等待。 等待时间取决于内核数以及请求的时间。 - nav_help_change_password: "修改HPC密码" - nav_help_docs: "帮助文档" - nav_help_support: "联系支持人员" - nav_help_two_factor: "配置双重身份验证" - - quota_additional_message: "考虑删除或归档文件以释放磁盘空间。" - quota_reload_message: "重新加载页面以查看更新的配额。 配额每5分钟更新一次。" - quota_warning_prefix_html: "配额限制警告" - - balance_additional_message: "考虑申请额外的 %{balanace_units}" - balance_reload_message_html: "重新加载页面以查看更新后的余额。 余额每天更新。
最后一次更新是 %{last_update}" - balance_warning_prefix_html: "%{units_balance} 警告" - balance_message: "%{units_balance} 是 %{value}" - - welcome_html: | - %{logo_img_tag} -

OnDemand为您的所有HPC资源提供了一个集成的单一访问点。

- # General translations apps_setup_failure_html: |

初始化此应用程序的数据时出现问题。

@@ -58,97 +14,103 @@ zh-CN:

%{exception_message}

堆栈跟踪:

%{exception_trace}
- apps_system_apps_title: "系统应用" - - batch_connect_form_choose_template_name: "选择模版名称" - batch_connect_form_data_root: "数据根目录" - batch_connect_form_launch: "启动" - batch_connect_form_prefill: "使用模版预填写" - batch_connect_form_prefill_error: "诶呀,你的模版有问题" - batch_connect_form_reset_resolution: "重置分辨率" - batch_connect_form_save: "保存为模版" - batch_connect_form_save_new_template: "保存为一个新模版" - batch_connect_form_select_template: "选择一个模版" - batch_connect_form_session_data_html: | - * 你可以通过%{data_link_tag}来获取会话数据%{title}。 - batch_connect_form_type_new_name: "在这里输入你的新模版名称" - batch_connect_form_type_new_name_error: "请输入一个有效的名称以继续" - batch_connect_no_apps: "没有可用的互动应用程序。" - batch_connect_no_sessions: "您没有可运行的会话。" + apps_system_apps_title: 系统应用 + auto_log_location_title: 日志位置 + balance_additional_message: 考虑申请额外的 %{balanace_units} + balance_message: "%{units_balance} 是 %{value}" + balance_reload_message_html: 重新加载页面以查看更新后的余额。 余额每天更新。
最后一次更新是 %{last_update} + balance_warning_prefix_html: "%{units_balance} 警告" + batch_connect_form_choose_template_name: 选择模版名称 + batch_connect_form_data_root: 数据根目录 + batch_connect_form_launch: 启动 + batch_connect_form_prefill: 使用模版预填写 + batch_connect_form_prefill_error: 诶呀,你的模版有问题 + batch_connect_form_reset_resolution: 重置分辨率 + batch_connect_form_save: 保存为模版 + batch_connect_form_save_new_template: 保存为一个新模版 + batch_connect_form_select_template: 选择一个模版 + batch_connect_form_session_data_html: "* 你可以通过%{data_link_tag}来获取会话数据%{title}。\n" + batch_connect_form_type_new_name: 在这里输入你的新模版名称 + batch_connect_form_type_new_name_error: 请输入一个有效的名称以继续 + batch_connect_no_apps: 没有可用的互动应用程序。 + batch_connect_no_sessions: 您没有可运行的会话。 batch_connect_sandbox: " [Sandbox]" - batch_connect_sessions_data_html: | - 你可以通过%{data_link_tag}来获取会话数据%{title}。 - batch_connect_sessions_error_invalid_job_name_html: | - 如果由于作业名称无效而导致该作业提交失败,请要求管理员配置OnDemand来设置环境变量OOD_JOB_NAME_ILLEGAL_CHARS。 - batch_connect_sessions_delete_confirm: "你确定吗?" - batch_connect_sessions_delete_hover: "删除会话" - batch_connect_sessions_delete_title: "删除" - batch_connect_sessions_errors_staging: "无法调用模板,并显示以下错误:" - batch_connect_sessions_errors_submission: "提交会话失败,出现以下错误:" - batch_connect_sessions_novnc_launch: "启动%{app_title}" - batch_connect_sessions_novnc_view_only: "只读 (共享链接)" - batch_connect_sessions_staged_root: "暂存根目录" - batch_connect_sessions_stats_created_at: "创建于:" - batch_connect_sessions_stats_host: "主机:" - batch_connect_sessions_stats_session_id: "会话ID:" - batch_connect_sessions_stats_time_remaining: "剩余时间:" - batch_connect_sessions_stats_time_requested: "所需时间:" - batch_connect_sessions_stats_time_used: "使用时间:" - batch_connect_sessions_stats_undetermined_host: "未定" - batch_connect_sessions_status_blurb_create_success: "会话已成功创建。" - batch_connect_sessions_status_blurb_delete_failure: "删除会话失败。" - batch_connect_sessions_status_blurb_delete_success: "会话已成功删除." - batch_connect_sessions_status_starting: | - 您的会话目前正在启动...请耐心等待,因为此过程可能需要几分钟。 - breadcrumbs_all_apps: "所有应用" - breadcrumbs_home: "主页" - breadcrumbs_my_sessions: "我的交互会话" + batch_connect_sessions_data_html: '你可以通过%{data_link_tag}来获取会话数据%{title}。 + +' + batch_connect_sessions_delete_confirm: 你确定吗? + batch_connect_sessions_delete_hover: 删除会话 + batch_connect_sessions_delete_title: 删除 + batch_connect_sessions_error_invalid_job_name_html: '如果由于作业名称无效而导致该作业提交失败,请要求管理员配置OnDemand来设置环境变量OOD_JOB_NAME_ILLEGAL_CHARS。 + +' + batch_connect_sessions_errors_staging: 无法调用模板,并显示以下错误: + batch_connect_sessions_errors_submission: 提交会话失败,出现以下错误: + batch_connect_sessions_novnc_launch: 启动%{app_title} + batch_connect_sessions_novnc_view_only: 只读 (共享链接) + batch_connect_sessions_staged_root: 暂存根目录 + batch_connect_sessions_stats_created_at: 创建于: + batch_connect_sessions_stats_host: 主机: + batch_connect_sessions_stats_session_id: 会话ID: + batch_connect_sessions_stats_time_remaining: 剩余时间: + batch_connect_sessions_stats_time_requested: 所需时间: + batch_connect_sessions_stats_time_used: 使用时间: + batch_connect_sessions_stats_undetermined_host: 未定 + batch_connect_sessions_status_bad: 你的会话出现问题。请与支持人员联系以获取更多信息。 + batch_connect_sessions_status_blurb_create_success: 会话已成功创建。 + batch_connect_sessions_status_blurb_delete_failure: 删除会话失败。 + batch_connect_sessions_status_blurb_delete_success: 会话已成功删除. + batch_connect_sessions_status_missing_connection: '此应用缺少建立连接所需的信息。 如果看到此消息,请与支持人员联系。 - motd_title: "每日信息" +' + batch_connect_sessions_status_queued: '由于您的工作目前正在排队,请耐心等待。 等待时间取决于内核数以及请求的时间。 - nav_all_apps: "所有应用" - nav_develop_docs: "开发者文档" - nav_develop_my_sandbox_apps_dev: "我的沙盒应用 (Development)" - nav_develop_my_sandbox_apps_prod: "我的沙盒应用 (Production)" - nav_develop_title: "开发" - nav_help_title: "帮助" - nav_logout: "登出" - nav_restart_server: "重启网页服务器" - nav_sessions: "我的交互会话" # Note duplication with breadcrumbs_my_sessions - nav_user: "以用户名:%{username}登陆" +' + batch_connect_sessions_status_starting: '您的会话目前正在启动...请耐心等待,因为此过程可能需要几分钟。 - quota_block: "配额使用量%{used} 可用 %{available}" +' + breadcrumbs_all_apps: 所有应用 + breadcrumbs_home: 主页 + breadcrumbs_my_sessions: 我的交互会话 + delete: 删除 + edit: 编辑 + launch: 启动 + motd_title: 每日信息 + nav_all_apps: 所有应用 + nav_develop_docs: 开发者文档 + nav_develop_my_sandbox_apps_dev: 我的沙盒应用 (Development) + nav_develop_my_sandbox_apps_prod: 我的沙盒应用 (Production) + nav_develop_title: 开发 + nav_help_change_password: 修改HPC密码 + nav_help_docs: 帮助文档 + nav_help_support: 联系支持人员 + nav_help_title: 帮助 + nav_help_two_factor: 配置双重身份验证 + nav_logout: 登出 + nav_restart_server: 重启网页服务器 + nav_sessions: 我的交互会话 + nav_user: 以用户名:%{username}登陆 + quota_additional_message: 考虑删除或归档文件以释放磁盘空间。 + quota_block: 配额使用量%{used} 可用 %{available} quota_block_shared: "(您的配额%{used_exclusive} )" - quota_file: "文件配额使用量%{used} 可用 %{available}" + quota_file: 文件配额使用量%{used} 可用 %{available} quota_file_shared: "(您的文件配额%{used_exclusive})" - + quota_reload_message: 重新加载页面以查看更新的配额。 配额每5分钟更新一次。 + quota_warning_prefix_html: 配额限制警告 restart_msg_html: | 您的小组成员资格已更改,这会影响您对应用程序的访问。 您的dashboard将自动重启。 如果没有重启,请点击 来重启网页服务器. - shared_apps_title: "共享应用" - # shared_apps_caption: "Shared by %{owner_title} (%{owner})" - # shared_apps_caption_short: "Shared by %{owner}" - sharing_catalog_title: "应用目录" - sharing_no_shared_apps_html: | - 没有可用的自定义共享应用。 - sharing_catalog_msg_html: | -
可以在%{catalog_link_tag}上查看可用应用程序的子集。 + shared_apps_title: 共享应用 + sharing_catalog_msg_html: "
可以在%{catalog_link_tag}上查看可用应用程序的子集。\n" + sharing_catalog_title: 应用目录 + sharing_no_shared_apps_html: "没有可用的自定义共享应用。\n" sharing_support_msg_html: | 如果您没有找到所需的应用程序,请 联系支持. sharing_welcome_msg_html: | 可以从上方导航栏中的下拉菜单访问群集访问应用程序。
自定义共享应用程序可以在下面使用。 - - auto_log_location_title: "日志位置" - - # all_apps_table_app_column: "Name" - # all_apps_table_category_column: "Category" - # all_apps_table_sub_category_column: "Sub Category" - - # unknown: "Unknown" - delete: "删除" - edit: "编辑" - show: "显示" - launch: "启动" - # development_apps_caption: "Sandbox App" + show: 显示 + welcome_html: | + %{logo_img_tag} +

OnDemand为您的所有HPC资源提供了一个集成的单一访问点。

From 35e8454a6cd08090ff97aa05f2569d7abd1cb263 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 11:28:45 -0500 Subject: [PATCH 10/13] Updates to most recent version of i18n-tasks --- apps/dashboard/Gemfile | 2 +- apps/dashboard/Gemfile.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index 89a77e1312..5c90f2bbf9 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -39,7 +39,7 @@ end group :development do # Access an IRB console on exception pages or by using <%= console %> in views # gem 'web-console', '~> 2.0' - gem 'i18n-tasks', '0.9.37' + gem 'i18n-tasks' gem 'highline', '2.1.0' #gem 'easy_translate' #gem 'ruby-openai' diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index 05668fa4a6..5a50314b5e 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -122,13 +122,13 @@ GEM domain_name (~> 0.5) i18n (1.14.6) concurrent-ruby (~> 1.0) - i18n-tasks (0.9.37) + i18n-tasks (1.0.14) activesupport (>= 4.0.2) ast (>= 2.1.0) erubi highline (>= 2.0.0) i18n - parser (>= 2.2.3.0) + parser (>= 3.2.2.1) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) @@ -325,7 +325,7 @@ DEPENDENCIES dotiw erubi highline (= 2.1.0) - i18n-tasks (= 0.9.37) + i18n-tasks jbuilder (~> 2.0) jsbundling-rails (~> 1.0) local_time (~> 1.0.3) From f138ed4240de779ecdd862884864b771637021a6 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 11:31:49 -0500 Subject: [PATCH 11/13] The results of running i18n-tasks add-missing --- apps/dashboard/config/locales/en.yml | 3 + apps/dashboard/config/locales/ja_JP.yml | 244 ++++++++++++++++++++++++ apps/dashboard/config/locales/zh-CN.yml | 135 +++++++++++++ 3 files changed, 382 insertions(+) diff --git a/apps/dashboard/config/locales/en.yml b/apps/dashboard/config/locales/en.yml index 831c67f077..9bb12c056a 100644 --- a/apps/dashboard/config/locales/en.yml +++ b/apps/dashboard/config/locales/en.yml @@ -69,6 +69,7 @@ en: The %{title} session data for this session can be accessed under the %{data_link_tag}. batch_connect_sessions_delete_confirm: Are you sure? + batch_connect_sessions_delete_hover: 删除会话 batch_connect_sessions_delete_title: Delete batch_connect_sessions_edit_title: Edit new %{title} with this session parameters batch_connect_sessions_error_invalid_job_name_html: | @@ -181,6 +182,7 @@ en: nav_develop_my_sandbox_apps_prod: My Shared Apps (Production) nav_develop_title: Develop nav_help_change_password: Change HPC Password + nav_help_custom: Nav help custom nav_help_docs: Online Documentation nav_help_support: Contact Support nav_help_support_ticket: Submit Support Ticket @@ -245,6 +247,7 @@ en: validation_error: Invalid Request. Please review the error messages below system_apps_caption: System Installed App unknown: Unknown + uppy: Uppy user_configuration: support_ticket_error: support_ticket is misconfigured. "email" or "rt_api" sections are required in the configuration YAML. welcome_html: | diff --git a/apps/dashboard/config/locales/ja_JP.yml b/apps/dashboard/config/locales/ja_JP.yml index 84433b89a8..224800146a 100644 --- a/apps/dashboard/config/locales/ja_JP.yml +++ b/apps/dashboard/config/locales/ja_JP.yml @@ -1,11 +1,255 @@ --- ja_JP: + activemodel: + errors: + messages: + format: "%{attribute} format invalid or missing" + invalid: "%{attribute} is invalid" + required: "%{attribute} is required" + used: "%{attribute} is already used" dashboard: + active_sessions_caption_html: view all (%{number_of_sessions}) + active_sessions_title: Active interactive sessions add: 付け加え + all_apps_table_app_column: Name + all_apps_table_category_column: Category + all_apps_table_sub_category_column: Sub Category + announcements_dismissible_button: OK + announcements_required_button: Accept + apps_setup_failure_html: | +

A problem occurred while initializing your data for this app.

+

+ At your own risk you can still open the app + or you can just go back to the dashboard +

+

+ Share this with the developer of your app: + The setup production script is supposed to be idempotent and is run each time + the user opens the app through the dashboard.

+

Exception: %{exception_class}

+
%{exception_message}
+

Stack trace:

+
%{exception_trace}
+ apps_system_apps_title: System Apps auto_log_location_title: ログの場所 + balance_additional_message: Consider requesting additional %{balanace_units} + balance_message: "%{units_balance} is %{value}" + balance_reload_message_html: Reload page to see updated balance. Balances are updated daily.
Last update was %{last_update} + balance_warning_prefix_html: "%{units_balance} warning for" + batch_connect_apps_menu_title: Interactive Apps + batch_connect_form_attr_cache_error: Unable to use previously cached values, using defaults instead. (%{error_message}) + batch_connect_form_choose_template_name: Choose a template name + batch_connect_form_data_root: data root directory + batch_connect_form_invalid: The form.yml has missing options in the %{id} form field. + batch_connect_form_launch: Launch + batch_connect_form_prefill: Use saved settings + batch_connect_form_prefill_error: Oops... Something is wrong with your template + batch_connect_form_reset_resolution: Reset Resolution + batch_connect_form_save: Save settings + batch_connect_form_save_new_template: save new settings + batch_connect_form_save_submit: Save settings and close + batch_connect_form_select_template: select saved settings + batch_connect_form_session_data_html: | + * The %{title} session data for this session can be accessed + under the %{data_link_tag}. + batch_connect_form_template_name_label: setting name + batch_connect_form_type_new_name: App settings name + batch_connect_form_type_new_name_error: Please type a valid name to continue + batch_connect_invalid_form_array: "'form' element in form.yml is not an Array" + batch_connect_invalid_form_attributes: "'attributes' element in form.yml is not a Map" + batch_connect_missing_cluster: | + The cluster was never set. Either set it in form.yml.erb with `cluster` or `form.cluster` or + set `cluster` in submit.yml.erb. + batch_connect_no_apps: There are no available Interactive Apps. + batch_connect_no_sessions: You have no active sessions. + batch_connect_sandbox: " [Sandbox]" + batch_connect_sessions_cancel_confirm: Are you sure? + batch_connect_sessions_cancel_title: Cancel + batch_connect_sessions_data_html: | + The %{title} session data for this session can be accessed + under the %{data_link_tag}. + batch_connect_sessions_delete_confirm: Are you sure? + batch_connect_sessions_delete_hover: 删除会话 + batch_connect_sessions_delete_title: Delete + batch_connect_sessions_edit_title: Edit new %{title} with this session parameters + batch_connect_sessions_error_invalid_job_name_html: | + If this job failed to submit because of an invalid job name + please ask your administrator to configure OnDemand to set the + environment variable OOD_JOB_NAME_ILLEGAL_CHARS. + batch_connect_sessions_errors_staging: 'Failed to stage the template with the following error:' + batch_connect_sessions_errors_submission: 'Failed to submit session with the following error:' + batch_connect_sessions_novnc_launch: Launch %{app_title} + batch_connect_sessions_novnc_view_only: View Only (Share-able Link) + batch_connect_sessions_path_selector_forbidden_error: You do not have permission to select that directory or file. + batch_connect_sessions_relaunch_title: Relaunch + batch_connect_sessions_staged_root: staged root directory + batch_connect_sessions_stats_created_at: 'Created at:' + batch_connect_sessions_stats_host: 'Host:' + batch_connect_sessions_stats_session_id: 'Session ID:' + batch_connect_sessions_stats_support_ticket: Problems with this session? + batch_connect_sessions_stats_support_ticket_link_text: Submit support ticket + batch_connect_sessions_stats_time_remaining: 'Time Remaining:' + batch_connect_sessions_stats_time_requested: 'Time Requested:' + batch_connect_sessions_stats_time_used: 'Time Used:' + batch_connect_sessions_stats_undetermined_host: Undetermined + batch_connect_sessions_status_bad: Your session has entered a bad state. Feel free to contact support for further information. + batch_connect_sessions_status_blurb_cancel_failure: Failed to cancel session. + batch_connect_sessions_status_blurb_cancel_success: Session was successfully canceled. + batch_connect_sessions_status_blurb_create_success: Session was successfully created. + batch_connect_sessions_status_blurb_delete_failure: Failed to delete session. + batch_connect_sessions_status_blurb_delete_success: Session was successfully deleted. + batch_connect_sessions_status_completed: For debugging purposes, this card will be retained for %{days} more days + batch_connect_sessions_status_missing_connection: | + This app is missing information required to establish a connection. Please + contact support if you see this message. + batch_connect_sessions_status_queued: | + Please be patient as your job currently sits in queue. The wait time depends + on the number of cores as well as time requested. + batch_connect_sessions_status_starting: | + Your session is currently starting... Please be patient as this process can + take a few minutes. + batch_connect_sessions_word: Session + bc_saved_settings: + delete_confirm: Are you sure? + delete_title: Delete %{settings_name} saved settings + deleted_message: Saved settings %{settings_name} deleted. + edit_title: Edit %{settings_name} saved settings + launch_title: Launch %{app_title} with %{settings_name} parameters + missing_settings: Selected saved settings not found. + no_settings_title: You have no saved settings. + outdated_message: "%{app_title} parameters have changed since these settings were created." + saved_message: "%{settings_name} settings saved" + settings_values_label: Values + title: Saved Settings + breadcrumbs_all_apps: All Apps + breadcrumbs_home: Home + breadcrumbs_my_sessions: My Interactive Sessions + breadcrumbs_support_ticket: Support Ticket + close: Close + custom_pages: + invalid: 'Invalid page code: %{page}. This page has not been configured' delete: 消す + development_apps_caption: Sandbox App + directory: Directory edit: 編集する + files_directory_download_error_modal_title: Directory too large to download + files_directory_download_unauthorized: You can only download a directory as zip that you have read and execute access to + files_directory_size_calculation_error: Timeout while trying to determine directory size. + files_directory_size_calculation_timeout: Timeout while trying to determine directory size. + files_directory_size_unknown: 'Error with status %{exit_code} when trying to determine directory size: %{error}' + files_directory_too_large: The directory is too large to download as a zip. The directory should be less than %{download_directory_size_limit} bytes. + files_download_not_enabled: Downloading files is not enabled on this server. + files_remote_dir_not_created: Did not create directory %{path} + files_remote_disabled: Remote file support is not enabled + files_remote_empty_dir_unsupported: Remote does not support empty directories + files_remote_error_listing_remotes: 'Error listing Rclone remotes: %{error}' + jobs_create_blank_project: Create a new project + jobs_create_template_project: Create a new project from a template + jobs_launchers: Launchers + jobs_launchers_created: Launcher successfully created! + jobs_launchers_default_created: A 'hello_world.sh' was also added to this project. + jobs_launchers_delete_script_confirmation: Delete all contents of launcher? + jobs_launchers_deleted: Launcher successfully deleted! + jobs_launchers_fixed_field: Fixed Value + jobs_launchers_not_found: Cannot find Launcher %{launcher_id} + jobs_launchers_submitted: Successfully submitted job %{job_id}. + jobs_launchers_updated: Launcher manifest updated! + jobs_new_launcher: New Launcher + jobs_project_created: Project successfully created! + jobs_project_delete_project_confirmation: Delete all contents of project directory? + jobs_project_deleted: Project successfully deleted! + jobs_project_description_placeholder: Project description + jobs_project_directory_help_html: 'Leave empty and a new directory will be created.
Default location: %{root_directory}' + jobs_project_directory_placeholder: Project directory absolute path + jobs_project_generic_error: 'There was an error processing your request: %{error}' + jobs_project_invalid_configuration_clusters: An HPC cluster is required. Contact your administrator to add one to the system. + jobs_project_invalid_configuration_scripts: An executable script is required for your project. Upload a script using the file application. + jobs_project_job_deleted: Successfully deleted job %{job_id} + jobs_project_job_not_deleted: Cannot delete job %{job_id} + jobs_project_job_stopped: Successfully stopped job %{job_id} + jobs_project_manifest_updated: Project manifest updated! + jobs_project_name_placeholder: Project name + jobs_project_name_validation: Project name may only contain letters, digits, dashes, underscores, and spaces + jobs_project_not_found: Cannot find project %{project_id} + jobs_project_save_error: Cannot save manifest to %{path} + jobs_project_validation_error: Invalid Request. Please review the errors below launch: 起動する + motd_erb_render_error: 'MOTD was not parsed or rendered correctly: %{error_message}' + motd_title: Message of the Day + nav_all_apps: All Apps + nav_develop_docs: Developer Documentation + nav_develop_my_sandbox_apps_dev: My Sandbox Apps (Development) + nav_develop_my_sandbox_apps_prod: My Shared Apps (Production) + nav_develop_title: Develop + nav_help_change_password: Change HPC Password + nav_help_custom: Nav help custom + nav_help_docs: Online Documentation + nav_help_support: Contact Support + nav_help_support_ticket: Submit Support Ticket + nav_help_title: Help + nav_help_two_factor: Configure Two-Factor Authentication + nav_limit_caption: showing %{subset_count} of %{total_count} + nav_logout: Log Out + nav_restart_server: Restart Web Server + nav_sessions: My Interactive Sessions + nav_user: Logged in as %{username} + not_grouped: Other Apps + pinned_apps_caption_html: A featured subset of all available apps + pinned_apps_category: Apps + pinned_apps_title: Pinned Apps + project: Project + quota_additional_message: Consider deleting or archiving files to free up disk space. + quota_block: Using %{used} of quota %{available} + quota_block_shared: "(%{used_exclusive} are yours)" + quota_file: Using %{used} files of quota %{available} files + quota_file_shared: "(%{used_exclusive} files are yours)" + quota_reload_message: Reload page to see updated quota. Quotas are updated every 5 minutes. + quota_warning_prefix_html: Quota limit warning for + recently_used_apps_title: Recently Used Apps remove: 抜かす + restart_msg_html: | + Your group membership has changed, which affects your access to apps. Your dashboard should restart automatically. + If it doesn't please, click: restart web server. save: 溜める + saved_settings_title: Saved Settings + settings_invalid_request: Invalid settings submitted + settings_updated: Settings updated + shared_apps_caption: Shared by %{owner_title} (%{owner}) + shared_apps_caption_short: Shared by %{owner} + shared_apps_title: Shared Apps + sharing_catalog_msg_html: "
A subset of the apps available can be viewed on the %{catalog_link_tag}.\n" + sharing_catalog_title: App Catalog + sharing_no_shared_apps_html: "No custom shared apps available.\n" + sharing_support_msg_html: | + If you don't see the app you are looking for, please + contact support. + sharing_welcome_msg_html: | + Cluster access applications are available from the dropdown menus in the navbar above. +
Custom shared apps are available below. + shell_app_title: "%{cluster_title} Shell Access" show: 見せる + support_ticket: + creation_success: 'Support ticket email sent to: %{to}' + generic_error: 'There was an error processing your request: %{error}' + header: Support Ticket + rt: + creation_success: 'Support ticket created in RequestTracker system. TicketId: %{ticket_id}' + title: Support Ticket + validation: + attachments_items: The %{id} are invalid. %{items} added, maximum number of attachments is %{max} + attachments_size: The %{id} are invalid. Maximum attachment size is %{max} + email: The %{id} format is invalid. Expected a valid email address + items: + attachments_js: No more attachments allowed + required: The %{id} is required + size: + attachments_js: Max attachment size is %{max}. Selected file size is %{size} + validation_error: Invalid Request. Please review the error messages below + system_apps_caption: System Installed App + unknown: Unknown + uppy: Uppy + user_configuration: + support_ticket_error: support_ticket is misconfigured. "email" or "rt_api" sections are required in the configuration YAML. + welcome_html: | + %{logo_img_tag} +

OnDemand provides an integrated, single access point for all of your HPC resources.

diff --git a/apps/dashboard/config/locales/zh-CN.yml b/apps/dashboard/config/locales/zh-CN.yml index 8e92e77a04..e8e0819042 100644 --- a/apps/dashboard/config/locales/zh-CN.yml +++ b/apps/dashboard/config/locales/zh-CN.yml @@ -1,6 +1,21 @@ --- zh-CN: + activemodel: + errors: + messages: + format: "%{attribute} format invalid or missing" + invalid: "%{attribute} is invalid" + required: "%{attribute} is required" + used: "%{attribute} is already used" dashboard: + active_sessions_caption_html: view all (%{number_of_sessions}) + active_sessions_title: Active interactive sessions + add: Add + all_apps_table_app_column: Name + all_apps_table_category_column: Category + all_apps_table_sub_category_column: Sub Category + announcements_dismissible_button: OK + announcements_required_button: Accept apps_setup_failure_html: |

初始化此应用程序的数据时出现问题。

@@ -20,27 +35,40 @@ zh-CN: balance_message: "%{units_balance} 是 %{value}" balance_reload_message_html: 重新加载页面以查看更新后的余额。 余额每天更新。
最后一次更新是 %{last_update} balance_warning_prefix_html: "%{units_balance} 警告" + batch_connect_apps_menu_title: Interactive Apps + batch_connect_form_attr_cache_error: Unable to use previously cached values, using defaults instead. (%{error_message}) batch_connect_form_choose_template_name: 选择模版名称 batch_connect_form_data_root: 数据根目录 + batch_connect_form_invalid: The form.yml has missing options in the %{id} form field. batch_connect_form_launch: 启动 batch_connect_form_prefill: 使用模版预填写 batch_connect_form_prefill_error: 诶呀,你的模版有问题 batch_connect_form_reset_resolution: 重置分辨率 batch_connect_form_save: 保存为模版 batch_connect_form_save_new_template: 保存为一个新模版 + batch_connect_form_save_submit: Save settings and close batch_connect_form_select_template: 选择一个模版 batch_connect_form_session_data_html: "* 你可以通过%{data_link_tag}来获取会话数据%{title}。\n" + batch_connect_form_template_name_label: setting name batch_connect_form_type_new_name: 在这里输入你的新模版名称 batch_connect_form_type_new_name_error: 请输入一个有效的名称以继续 + batch_connect_invalid_form_array: "'form' element in form.yml is not an Array" + batch_connect_invalid_form_attributes: "'attributes' element in form.yml is not a Map" + batch_connect_missing_cluster: | + The cluster was never set. Either set it in form.yml.erb with `cluster` or `form.cluster` or + set `cluster` in submit.yml.erb. batch_connect_no_apps: 没有可用的互动应用程序。 batch_connect_no_sessions: 您没有可运行的会话。 batch_connect_sandbox: " [Sandbox]" + batch_connect_sessions_cancel_confirm: Are you sure? + batch_connect_sessions_cancel_title: Cancel batch_connect_sessions_data_html: '你可以通过%{data_link_tag}来获取会话数据%{title}。 ' batch_connect_sessions_delete_confirm: 你确定吗? batch_connect_sessions_delete_hover: 删除会话 batch_connect_sessions_delete_title: 删除 + batch_connect_sessions_edit_title: Edit new %{title} with this session parameters batch_connect_sessions_error_invalid_job_name_html: '如果由于作业名称无效而导致该作业提交失败,请要求管理员配置OnDemand来设置环境变量OOD_JOB_NAME_ILLEGAL_CHARS。 ' @@ -48,18 +76,25 @@ zh-CN: batch_connect_sessions_errors_submission: 提交会话失败,出现以下错误: batch_connect_sessions_novnc_launch: 启动%{app_title} batch_connect_sessions_novnc_view_only: 只读 (共享链接) + batch_connect_sessions_path_selector_forbidden_error: You do not have permission to select that directory or file. + batch_connect_sessions_relaunch_title: Relaunch batch_connect_sessions_staged_root: 暂存根目录 batch_connect_sessions_stats_created_at: 创建于: batch_connect_sessions_stats_host: 主机: batch_connect_sessions_stats_session_id: 会话ID: + batch_connect_sessions_stats_support_ticket: Problems with this session? + batch_connect_sessions_stats_support_ticket_link_text: Submit support ticket batch_connect_sessions_stats_time_remaining: 剩余时间: batch_connect_sessions_stats_time_requested: 所需时间: batch_connect_sessions_stats_time_used: 使用时间: batch_connect_sessions_stats_undetermined_host: 未定 batch_connect_sessions_status_bad: 你的会话出现问题。请与支持人员联系以获取更多信息。 + batch_connect_sessions_status_blurb_cancel_failure: Failed to cancel session. + batch_connect_sessions_status_blurb_cancel_success: Session was successfully canceled. batch_connect_sessions_status_blurb_create_success: 会话已成功创建。 batch_connect_sessions_status_blurb_delete_failure: 删除会话失败。 batch_connect_sessions_status_blurb_delete_success: 会话已成功删除. + batch_connect_sessions_status_completed: For debugging purposes, this card will be retained for %{days} more days batch_connect_sessions_status_missing_connection: '此应用缺少建立连接所需的信息。 如果看到此消息,请与支持人员联系。 ' @@ -69,12 +104,73 @@ zh-CN: batch_connect_sessions_status_starting: '您的会话目前正在启动...请耐心等待,因为此过程可能需要几分钟。 ' + batch_connect_sessions_word: Session + bc_saved_settings: + delete_confirm: Are you sure? + delete_title: Delete %{settings_name} saved settings + deleted_message: Saved settings %{settings_name} deleted. + edit_title: Edit %{settings_name} saved settings + launch_title: Launch %{app_title} with %{settings_name} parameters + missing_settings: Selected saved settings not found. + no_settings_title: You have no saved settings. + outdated_message: "%{app_title} parameters have changed since these settings were created." + saved_message: "%{settings_name} settings saved" + settings_values_label: Values + title: Saved Settings breadcrumbs_all_apps: 所有应用 breadcrumbs_home: 主页 breadcrumbs_my_sessions: 我的交互会话 + breadcrumbs_support_ticket: Support Ticket + close: Close + custom_pages: + invalid: 'Invalid page code: %{page}. This page has not been configured' delete: 删除 + development_apps_caption: Sandbox App + directory: Directory edit: 编辑 + files_directory_download_error_modal_title: Directory too large to download + files_directory_download_unauthorized: You can only download a directory as zip that you have read and execute access to + files_directory_size_calculation_error: Timeout while trying to determine directory size. + files_directory_size_calculation_timeout: Timeout while trying to determine directory size. + files_directory_size_unknown: 'Error with status %{exit_code} when trying to determine directory size: %{error}' + files_directory_too_large: The directory is too large to download as a zip. The directory should be less than %{download_directory_size_limit} bytes. + files_download_not_enabled: Downloading files is not enabled on this server. + files_remote_dir_not_created: Did not create directory %{path} + files_remote_disabled: Remote file support is not enabled + files_remote_empty_dir_unsupported: Remote does not support empty directories + files_remote_error_listing_remotes: 'Error listing Rclone remotes: %{error}' + jobs_create_blank_project: Create a new project + jobs_create_template_project: Create a new project from a template + jobs_launchers: Launchers + jobs_launchers_created: Launcher successfully created! + jobs_launchers_default_created: A 'hello_world.sh' was also added to this project. + jobs_launchers_delete_script_confirmation: Delete all contents of launcher? + jobs_launchers_deleted: Launcher successfully deleted! + jobs_launchers_fixed_field: Fixed Value + jobs_launchers_not_found: Cannot find Launcher %{launcher_id} + jobs_launchers_submitted: Successfully submitted job %{job_id}. + jobs_launchers_updated: Launcher manifest updated! + jobs_new_launcher: New Launcher + jobs_project_created: Project successfully created! + jobs_project_delete_project_confirmation: Delete all contents of project directory? + jobs_project_deleted: Project successfully deleted! + jobs_project_description_placeholder: Project description + jobs_project_directory_help_html: 'Leave empty and a new directory will be created.
Default location: %{root_directory}' + jobs_project_directory_placeholder: Project directory absolute path + jobs_project_generic_error: 'There was an error processing your request: %{error}' + jobs_project_invalid_configuration_clusters: An HPC cluster is required. Contact your administrator to add one to the system. + jobs_project_invalid_configuration_scripts: An executable script is required for your project. Upload a script using the file application. + jobs_project_job_deleted: Successfully deleted job %{job_id} + jobs_project_job_not_deleted: Cannot delete job %{job_id} + jobs_project_job_stopped: Successfully stopped job %{job_id} + jobs_project_manifest_updated: Project manifest updated! + jobs_project_name_placeholder: Project name + jobs_project_name_validation: Project name may only contain letters, digits, dashes, underscores, and spaces + jobs_project_not_found: Cannot find project %{project_id} + jobs_project_save_error: Cannot save manifest to %{path} + jobs_project_validation_error: Invalid Request. Please review the errors below launch: 启动 + motd_erb_render_error: 'MOTD was not parsed or rendered correctly: %{error_message}' motd_title: 每日信息 nav_all_apps: 所有应用 nav_develop_docs: 开发者文档 @@ -82,14 +178,22 @@ zh-CN: nav_develop_my_sandbox_apps_prod: 我的沙盒应用 (Production) nav_develop_title: 开发 nav_help_change_password: 修改HPC密码 + nav_help_custom: Nav help custom nav_help_docs: 帮助文档 nav_help_support: 联系支持人员 + nav_help_support_ticket: Submit Support Ticket nav_help_title: 帮助 nav_help_two_factor: 配置双重身份验证 + nav_limit_caption: showing %{subset_count} of %{total_count} nav_logout: 登出 nav_restart_server: 重启网页服务器 nav_sessions: 我的交互会话 nav_user: 以用户名:%{username}登陆 + not_grouped: Other Apps + pinned_apps_caption_html: A featured subset of all available apps + pinned_apps_category: Apps + pinned_apps_title: Pinned Apps + project: Project quota_additional_message: 考虑删除或归档文件以释放磁盘空间。 quota_block: 配额使用量%{used} 可用 %{available} quota_block_shared: "(您的配额%{used_exclusive} )" @@ -97,9 +201,17 @@ zh-CN: quota_file_shared: "(您的文件配额%{used_exclusive})" quota_reload_message: 重新加载页面以查看更新的配额。 配额每5分钟更新一次。 quota_warning_prefix_html: 配额限制警告 + recently_used_apps_title: Recently Used Apps + remove: Remove restart_msg_html: | 您的小组成员资格已更改,这会影响您对应用程序的访问。 您的dashboard将自动重启。 如果没有重启,请点击 来重启网页服务器. + save: Save + saved_settings_title: Saved Settings + settings_invalid_request: Invalid settings submitted + settings_updated: Settings updated + shared_apps_caption: Shared by %{owner_title} (%{owner}) + shared_apps_caption_short: Shared by %{owner} shared_apps_title: 共享应用 sharing_catalog_msg_html: "
可以在%{catalog_link_tag}上查看可用应用程序的子集。\n" sharing_catalog_title: 应用目录 @@ -110,7 +222,30 @@ zh-CN: sharing_welcome_msg_html: | 可以从上方导航栏中的下拉菜单访问群集访问应用程序。
自定义共享应用程序可以在下面使用。 + shell_app_title: "%{cluster_title} Shell Access" show: 显示 + support_ticket: + creation_success: 'Support ticket email sent to: %{to}' + generic_error: 'There was an error processing your request: %{error}' + header: Support Ticket + rt: + creation_success: 'Support ticket created in RequestTracker system. TicketId: %{ticket_id}' + title: Support Ticket + validation: + attachments_items: The %{id} are invalid. %{items} added, maximum number of attachments is %{max} + attachments_size: The %{id} are invalid. Maximum attachment size is %{max} + email: The %{id} format is invalid. Expected a valid email address + items: + attachments_js: No more attachments allowed + required: The %{id} is required + size: + attachments_js: Max attachment size is %{max}. Selected file size is %{size} + validation_error: Invalid Request. Please review the error messages below + system_apps_caption: System Installed App + unknown: Unknown + uppy: Uppy + user_configuration: + support_ticket_error: support_ticket is misconfigured. "email" or "rt_api" sections are required in the configuration YAML. welcome_html: | %{logo_img_tag}

OnDemand为您的所有HPC资源提供了一个集成的单一访问点。

From afdf238407b412ba5ed906abb8d38504cfbcef50 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 12:56:05 -0500 Subject: [PATCH 12/13] Adds gems necessary to translate missing keys --- apps/dashboard/Gemfile | 4 ++-- apps/dashboard/Gemfile.lock | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index 5c90f2bbf9..efef91ddb4 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -41,8 +41,8 @@ group :development do # gem 'web-console', '~> 2.0' gem 'i18n-tasks' gem 'highline', '2.1.0' - #gem 'easy_translate' - #gem 'ruby-openai' + gem 'easy_translate' + gem 'ruby-openai' end # lock gems to versions that are compatible with ruby 2.7.0, diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index 5a50314b5e..7d441c5488 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -111,8 +111,20 @@ GEM dotiw (5.3.3) activesupport i18n + easy_translate (0.5.1) + thread + thread_safe erubi (1.13.0) + event_stream_parser (1.0.0) execjs (2.10.0) + faraday (2.12.2) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-multipart (1.1.0) + multipart-post (~> 2.0) + faraday-net_http (3.4.0) + net-http (>= 0.5.0) ffi (1.16.3) globalid (1.2.1) activesupport (>= 6.1) @@ -137,6 +149,7 @@ GEM activesupport (>= 5.0.0) jsbundling-rails (1.3.1) railties (>= 6.0.0) + json (2.9.1) local_time (1.0.3) coffee-rails logger (1.6.3) @@ -166,8 +179,11 @@ GEM mocha (2.7.1) ruby2_keywords (>= 0.0.5) multi_json (1.15.0) + multipart-post (2.4.1) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) + net-http (0.6.0) + uri net-imap (0.3.7) date net-protocol @@ -257,6 +273,10 @@ GEM rexml (3.4.0) rss (0.3.1) rexml + ruby-openai (7.3.1) + event_stream_parser (>= 0.3.0, < 2.0.0) + faraday (>= 1) + faraday-multipart (>= 1) ruby2_keywords (0.0.5) rubyzip (2.3.2) sdoc (2.6.1) @@ -288,6 +308,8 @@ GEM terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.3.2) + thread (0.2.2) + thread_safe (0.3.6) tilt (2.4.0) timecop (0.9.10) timeout (0.4.2) @@ -298,6 +320,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.6.0) + uri (1.0.2) webrick (1.9.1) websocket (1.2.11) websocket-driver (0.7.6) @@ -323,6 +346,7 @@ DEPENDENCIES dalli dotenv-rails (~> 2.1) dotiw + easy_translate erubi highline (= 2.1.0) i18n-tasks @@ -341,6 +365,7 @@ DEPENDENCIES redcarpet (~> 3.3) rest-client (~> 2.0) rss (~> 0.2) + ruby-openai sdoc selenium-webdriver (= 4.5.0) sinatra From 458a13248046db22c288eaf9258a1f982b6d3343 Mon Sep 17 00:00:00 2001 From: HazelGrant Date: Wed, 18 Dec 2024 13:55:49 -0500 Subject: [PATCH 13/13] Removes gems that cause build failure --- apps/dashboard/Gemfile | 4 ++-- apps/dashboard/Gemfile.lock | 25 ------------------------- 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/apps/dashboard/Gemfile b/apps/dashboard/Gemfile index efef91ddb4..7d04308e71 100644 --- a/apps/dashboard/Gemfile +++ b/apps/dashboard/Gemfile @@ -41,8 +41,8 @@ group :development do # gem 'web-console', '~> 2.0' gem 'i18n-tasks' gem 'highline', '2.1.0' - gem 'easy_translate' - gem 'ruby-openai' + # gem 'easy_translate' + # gem 'ruby-openai' end # lock gems to versions that are compatible with ruby 2.7.0, diff --git a/apps/dashboard/Gemfile.lock b/apps/dashboard/Gemfile.lock index 7d441c5488..5a50314b5e 100644 --- a/apps/dashboard/Gemfile.lock +++ b/apps/dashboard/Gemfile.lock @@ -111,20 +111,8 @@ GEM dotiw (5.3.3) activesupport i18n - easy_translate (0.5.1) - thread - thread_safe erubi (1.13.0) - event_stream_parser (1.0.0) execjs (2.10.0) - faraday (2.12.2) - faraday-net_http (>= 2.0, < 3.5) - json - logger - faraday-multipart (1.1.0) - multipart-post (~> 2.0) - faraday-net_http (3.4.0) - net-http (>= 0.5.0) ffi (1.16.3) globalid (1.2.1) activesupport (>= 6.1) @@ -149,7 +137,6 @@ GEM activesupport (>= 5.0.0) jsbundling-rails (1.3.1) railties (>= 6.0.0) - json (2.9.1) local_time (1.0.3) coffee-rails logger (1.6.3) @@ -179,11 +166,8 @@ GEM mocha (2.7.1) ruby2_keywords (>= 0.0.5) multi_json (1.15.0) - multipart-post (2.4.1) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - net-http (0.6.0) - uri net-imap (0.3.7) date net-protocol @@ -273,10 +257,6 @@ GEM rexml (3.4.0) rss (0.3.1) rexml - ruby-openai (7.3.1) - event_stream_parser (>= 0.3.0, < 2.0.0) - faraday (>= 1) - faraday-multipart (>= 1) ruby2_keywords (0.0.5) rubyzip (2.3.2) sdoc (2.6.1) @@ -308,8 +288,6 @@ GEM terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.3.2) - thread (0.2.2) - thread_safe (0.3.6) tilt (2.4.0) timecop (0.9.10) timeout (0.4.2) @@ -320,7 +298,6 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.6.0) - uri (1.0.2) webrick (1.9.1) websocket (1.2.11) websocket-driver (0.7.6) @@ -346,7 +323,6 @@ DEPENDENCIES dalli dotenv-rails (~> 2.1) dotiw - easy_translate erubi highline (= 2.1.0) i18n-tasks @@ -365,7 +341,6 @@ DEPENDENCIES redcarpet (~> 3.3) rest-client (~> 2.0) rss (~> 0.2) - ruby-openai sdoc selenium-webdriver (= 4.5.0) sinatra