diff --git a/.discourse-compatibility b/.discourse-compatibility
index 44e5580a..0b92c4a8 100644
--- a/.discourse-compatibility
+++ b/.discourse-compatibility
@@ -1,3 +1,4 @@
+< 3.5.0.beta6-dev: 7e0a51707f98eb8ec49fa39c519075b1766d54be
< 3.5.0.beta5-dev: 5c44f829ef82ded3416b0cddc521e9e6d62ed534
< 3.5.0.beta4-dev: 14ca3c07efa0a80712a4cbb8ca455c32a727adec
< 3.5.0.beta2-dev: 5f24835801fdc7cb98e1bcf42d2ab2e49e609921
diff --git a/app/jobs/regular/detect_translate_post.rb b/app/jobs/regular/detect_translate_post.rb
index e43f7abe..a264d49f 100644
--- a/app/jobs/regular/detect_translate_post.rb
+++ b/app/jobs/regular/detect_translate_post.rb
@@ -25,7 +25,7 @@ def execute(args)
return
end
- locales = SiteSetting.automatic_translation_target_languages.split("|")
+ locales = SiteSetting.experimental_content_localization_supported_locales.split("|")
return if locales.blank?
locales.each do |locale|
diff --git a/app/jobs/regular/detect_translate_topic.rb b/app/jobs/regular/detect_translate_topic.rb
index a93743e0..8dda4edb 100644
--- a/app/jobs/regular/detect_translate_topic.rb
+++ b/app/jobs/regular/detect_translate_topic.rb
@@ -26,7 +26,7 @@ def execute(args)
return
end
- locales = SiteSetting.automatic_translation_target_languages.split("|")
+ locales = SiteSetting.experimental_content_localization_supported_locales.split("|")
return if locales.blank?
locales.each do |locale|
diff --git a/app/jobs/regular/translate_categories.rb b/app/jobs/regular/translate_categories.rb
index d6745dbc..16fcce2a 100644
--- a/app/jobs/regular/translate_categories.rb
+++ b/app/jobs/regular/translate_categories.rb
@@ -11,7 +11,7 @@ def execute(args)
return unless SiteSetting.translator_enabled
return unless SiteSetting.experimental_content_translation
- locales = SiteSetting.automatic_translation_target_languages.split("|")
+ locales = SiteSetting.experimental_content_localization_supported_locales.split("|")
return if locales.blank?
cat_id = args[:from_category_id] || Category.order(:id).first&.id
diff --git a/app/jobs/regular/translate_posts.rb b/app/jobs/regular/translate_posts.rb
index 13a3dfc7..af0be11c 100644
--- a/app/jobs/regular/translate_posts.rb
+++ b/app/jobs/regular/translate_posts.rb
@@ -11,7 +11,7 @@ def execute(args)
return unless SiteSetting.translator_enabled
return unless SiteSetting.experimental_content_translation
- locales = SiteSetting.automatic_translation_target_languages.split("|")
+ locales = SiteSetting.experimental_content_localization_supported_locales.split("|")
return if locales.blank?
limit = args[:limit] || BATCH_SIZE
diff --git a/app/jobs/regular/translate_topics.rb b/app/jobs/regular/translate_topics.rb
index adc718e7..a91d3069 100644
--- a/app/jobs/regular/translate_topics.rb
+++ b/app/jobs/regular/translate_topics.rb
@@ -11,7 +11,7 @@ def execute(args)
return unless SiteSetting.translator_enabled
return unless SiteSetting.experimental_content_translation
- locales = SiteSetting.automatic_translation_target_languages.split("|")
+ locales = SiteSetting.experimental_content_localization_supported_locales.split("|")
return if locales.blank?
limit = args[:limit] || BATCH_SIZE
diff --git a/app/jobs/scheduled/category_translation_backfill.rb b/app/jobs/scheduled/category_translation_backfill.rb
index 0463edfc..0d8125bf 100644
--- a/app/jobs/scheduled/category_translation_backfill.rb
+++ b/app/jobs/scheduled/category_translation_backfill.rb
@@ -9,8 +9,7 @@ def execute(args)
return unless SiteSetting.translator_enabled
return unless SiteSetting.experimental_content_translation
- locales = SiteSetting.automatic_translation_target_languages.split("|")
- return if locales.blank?
+ return if SiteSetting.experimental_content_localization_supported_locales.blank?
Jobs.enqueue(:translate_categories)
end
diff --git a/app/jobs/scheduled/post_translation_backfill.rb b/app/jobs/scheduled/post_translation_backfill.rb
index a5a6c67c..6cbd96b3 100644
--- a/app/jobs/scheduled/post_translation_backfill.rb
+++ b/app/jobs/scheduled/post_translation_backfill.rb
@@ -9,7 +9,7 @@ def execute(args)
return unless SiteSetting.translator_enabled
return unless SiteSetting.experimental_content_translation
- return if SiteSetting.automatic_translation_target_languages.blank?
+ return if SiteSetting.experimental_content_localization_supported_locales.blank?
return if SiteSetting.automatic_translation_backfill_rate == 0
Jobs.enqueue(:translate_posts, limit: SiteSetting.automatic_translation_backfill_rate)
diff --git a/app/jobs/scheduled/topic_translation_backfill.rb b/app/jobs/scheduled/topic_translation_backfill.rb
index 0e5f3757..904c88b2 100644
--- a/app/jobs/scheduled/topic_translation_backfill.rb
+++ b/app/jobs/scheduled/topic_translation_backfill.rb
@@ -9,7 +9,7 @@ def execute(args)
return unless SiteSetting.translator_enabled
return unless SiteSetting.experimental_content_translation
- return if SiteSetting.automatic_translation_target_languages.blank?
+ return if SiteSetting.experimental_content_localization_supported_locales.blank?
return if SiteSetting.automatic_translation_backfill_rate == 0
Jobs.enqueue(:translate_topics, limit: SiteSetting.automatic_translation_backfill_rate)
diff --git a/assets/javascripts/discourse/components/language-switcher.gjs b/assets/javascripts/discourse/components/language-switcher.gjs
deleted file mode 100644
index f4aedc8d..00000000
--- a/assets/javascripts/discourse/components/language-switcher.gjs
+++ /dev/null
@@ -1,67 +0,0 @@
-import Component from "@glimmer/component";
-import { fn } from "@ember/helper";
-import { action } from "@ember/object";
-import { service } from "@ember/service";
-import DButton from "discourse/components/d-button";
-import DropdownMenu from "discourse/components/dropdown-menu";
-import cookie from "discourse/lib/cookie";
-import DMenu from "float-kit/components/d-menu";
-
-export default class LanguageSwitcher extends Component {
- @service site;
- @service siteSettings;
- @service router;
-
- get localeOptions() {
- const targetLanguages = (
- this.siteSettings.automatic_translation_target_languages || ""
- ).split("|");
- return JSON.parse(this.siteSettings.available_locales)
- .filter(({ value }) => targetLanguages.includes(value))
- .map(({ name, value }) => {
- return {
- label: name,
- value,
- };
- });
- }
-
- @action
- async changeLocale(locale) {
- cookie("locale", locale, { path: "/" });
- this.dMenu.close();
- // we need a hard refresh here for the locale to take effect
- window.location.reload();
- }
-
- @action
- onRegisterApi(api) {
- this.dMenu = api;
- }
-
-
-
- <:content>
-
- {{#each this.localeOptions as |option|}}
-
-
-
- {{/each}}
-
-
-
-
-}
diff --git a/assets/javascripts/discourse/components/show-original-content.gjs b/assets/javascripts/discourse/components/show-original-content.gjs
deleted file mode 100644
index 2bacb265..00000000
--- a/assets/javascripts/discourse/components/show-original-content.gjs
+++ /dev/null
@@ -1,59 +0,0 @@
-import Component from "@glimmer/component";
-import { tracked } from "@glimmer/tracking";
-import { action } from "@ember/object";
-import { service } from "@ember/service";
-import DButton from "discourse/components/d-button";
-import concatClass from "discourse/helpers/concat-class";
-import cookie, { removeCookie } from "discourse/lib/cookie";
-
-const SHOW_ORIGINAL_COOKIE = "discourse-translator-show-original";
-const SHOW_ORIGINAL_COOKIE_EXPIRY = 30;
-
-export default class ShowOriginalContent extends Component {
- static shouldRender(args) {
- return args.topic.show_translation_toggle;
- }
-
- @service router;
-
- @tracked showingOriginal = false;
-
- constructor() {
- super(...arguments);
- this.showingOriginal = cookie(SHOW_ORIGINAL_COOKIE);
- }
-
- @action
- async showOriginal() {
- if (this.showingOriginal) {
- removeCookie(SHOW_ORIGINAL_COOKIE, { path: "/" });
- } else {
- cookie(SHOW_ORIGINAL_COOKIE, true, {
- path: "/",
- expires: SHOW_ORIGINAL_COOKIE_EXPIRY,
- });
- }
-
- this.router.refresh();
- }
-
- get title() {
- return this.showingOriginal
- ? "translator.content_not_translated"
- : "translator.content_translated";
- }
-
-
-
-
-
-
-}
diff --git a/assets/javascripts/discourse/initializers/extend-for-translate-button.js b/assets/javascripts/discourse/initializers/extend-for-translate-button.js
index f11bafa2..9d81cb58 100644
--- a/assets/javascripts/discourse/initializers/extend-for-translate-button.js
+++ b/assets/javascripts/discourse/initializers/extend-for-translate-button.js
@@ -1,5 +1,4 @@
import { withPluginApi } from "discourse/lib/plugin-api";
-import LanguageSwitcher from "../components/language-switcher";
import ToggleTranslationButton from "../components/post-menu/toggle-translation-button";
import TranslatedPost from "../components/translated-post";
@@ -9,20 +8,6 @@ function initializeTranslation(api) {
return;
}
- const currentUser = api.getCurrentUser();
-
- if (
- !currentUser &&
- siteSettings.experimental_anon_language_switcher &&
- siteSettings.automatic_translation_target_languages
- ) {
- api.headerIcons.add(
- "discourse-translator_language-switcher",
- LanguageSwitcher,
- { before: ["search"] }
- );
- }
-
customizePostMenu(api);
}
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index c78afefb..886c63eb 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -17,11 +17,6 @@ en:
translator_azure_custom_subdomain: "Required if using a Virtual Network or Firewall for Azure Cognitive Services. Note: Only enter the custom subdomain not the full custom endpoint."
restrict_translation_by_group: "Only allowed groups can translate"
restrict_translation_by_poster_group: "Only allow translation of posts made by users in allowed groups. If empty, allow translations of posts from all users."
- experimental_anon_language_switcher: "Enable experimental language switcher. This will allow site visitors who are not logged in to switch between translated versions of Discourse and user-contributed content in topics."
- errors:
- needs_nonzero_backfill: "Automatic language translation requires the 'automatic_translation_backfill_rate' hidden setting to be a non-zero value. Please approach your site administrator to increase this limit."
- experimental_anon_language_switcher_requirements: "The experimental language switcher requires the `set locale from cookie` site setting to be enabled, and the `automatic translation target languages` to have at least one language."
- automatic_translation_target_languages: "The languages to automatically translate user content (posts, topics) to. If empty, no languages will be automatically translated."
translator:
failed:
topic: "The translator is unable to translate this topic's title (%{source_locale}) to your language (%{target_locale})."
diff --git a/config/settings.yml b/config/settings.yml
index 4a324e35..7a12e385 100644
--- a/config/settings.yml
+++ b/config/settings.yml
@@ -14,14 +14,6 @@ discourse_translator:
- Yandex
- LibreTranslate
validator: "DiscourseTranslator::Validators::TranslatorSelectionValidator"
- automatic_translation_target_languages:
- default: ""
- type: list
- client: true
- list_type: named
- allow_any: false
- choices: "DiscourseTranslator::TranslatableLanguagesSetting.values"
- validator: "DiscourseTranslator::Validators::TranslatableLanguagesValidator"
automatic_translation_backfill_rate:
default: 0
client: false
@@ -122,10 +114,6 @@ discourse_translator:
default: ""
client: true
type: group_list
- experimental_anon_language_switcher:
- default: false
- client: true
- validator: "DiscourseTranslator::Validators::LanguageSwitcherSettingValidator"
experimental_content_translation:
default: false
hidden: true
diff --git a/db/migrate/20250528040217_rename_translation_target_languages_to_content_localization_supported_locales.rb b/db/migrate/20250528040217_rename_translation_target_languages_to_content_localization_supported_locales.rb
new file mode 100644
index 00000000..c0d8ce4f
--- /dev/null
+++ b/db/migrate/20250528040217_rename_translation_target_languages_to_content_localization_supported_locales.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class RenameTranslationTargetLanguagesToContentLocalizationSupportedLocales < ActiveRecord::Migration[
+ 7.2
+]
+ def up
+ setting_exists =
+ DB.query_single(
+ "SELECT 1 FROM site_settings WHERE name = 'experimental_content_localization_supported_locales' LIMIT 1",
+ ).present?
+
+ if setting_exists
+ execute "DELETE FROM site_settings WHERE name = 'automatic_translation_target_languages'"
+ else
+ execute "UPDATE site_settings SET name = 'experimental_content_localization_supported_locales' WHERE name = 'automatic_translation_target_languages'"
+ end
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
diff --git a/lib/discourse_translator/parallel_text_translation.rb b/lib/discourse_translator/parallel_text_translation.rb
index c2cc72fe..5b458631 100644
--- a/lib/discourse_translator/parallel_text_translation.rb
+++ b/lib/discourse_translator/parallel_text_translation.rb
@@ -3,20 +3,14 @@
module DiscourseTranslator
class ParallelTextTranslation
def inject(plugin)
- # in parallel text translations,
- # we don't want to send the post for detection if automatic translation already happens,
- # as automatic translations send content for language detection as a side effect of translating
-
plugin.on(:post_process_cooked) do |_, post|
- if SiteSetting.automatic_translation_target_languages.blank? &&
- Guardian.new.can_detect_language?(post) && post.user_id > 0
+ if Guardian.new.can_detect_language?(post) && post.user_id > 0
Jobs.enqueue(:detect_translatable_language, type: "Post", translatable_id: post.id)
end
end
plugin.on(:topic_created) do |topic|
- if SiteSetting.automatic_translation_target_languages.blank? &&
- Guardian.new.can_detect_language?(topic.first_post) && topic.user_id > 0
+ if Guardian.new.can_detect_language?(topic.first_post) && topic.user_id > 0
Jobs.enqueue(:detect_translatable_language, type: "Topic", translatable_id: topic.id)
end
end
diff --git a/lib/discourse_translator/validators/language_switcher_setting_validator.rb b/lib/discourse_translator/validators/language_switcher_setting_validator.rb
deleted file mode 100644
index de13c83b..00000000
--- a/lib/discourse_translator/validators/language_switcher_setting_validator.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-module DiscourseTranslator
- module Validators
- class LanguageSwitcherSettingValidator
- def initialize(opts = {})
- @opts = opts
- end
-
- def valid_value?(val)
- return true if val == "f" || val == "false"
- SiteSetting.set_locale_from_cookie &&
- SiteSetting.automatic_translation_target_languages.present?
- end
-
- def error_message
- I18n.t("site_settings.errors.experimental_anon_language_switcher_requirements")
- end
- end
- end
-end
diff --git a/lib/discourse_translator/validators/translatable_languages_validator.rb b/lib/discourse_translator/validators/translatable_languages_validator.rb
deleted file mode 100644
index 0e3df8d9..00000000
--- a/lib/discourse_translator/validators/translatable_languages_validator.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# frozen_string_literal: true
-
-module DiscourseTranslator
- module Validators
- class TranslatableLanguagesValidator
- def initialize(opts = {})
- @opts = opts
- end
-
- def valid_value?(val)
- return true if val.blank?
-
- SiteSetting.automatic_translation_backfill_rate > 0
- end
-
- def error_message
- I18n.t("site_settings.errors.needs_nonzero_backfill")
- end
- end
- end
-end
diff --git a/spec/jobs/detect_translate_post_spec.rb b/spec/jobs/detect_translate_post_spec.rb
index 20c58b4c..6838aef9 100644
--- a/spec/jobs/detect_translate_post_spec.rb
+++ b/spec/jobs/detect_translate_post_spec.rb
@@ -10,7 +10,7 @@
SiteSetting.translator_enabled = true
SiteSetting.experimental_content_translation = true
SiteSetting.automatic_translation_backfill_rate = 1
- SiteSetting.automatic_translation_target_languages = locales.join("|")
+ SiteSetting.experimental_content_localization_supported_locales = locales.join("|")
end
it "does nothing when translator is disabled" do
@@ -45,7 +45,7 @@
end
it "does not translate when no target languages are configured" do
- SiteSetting.automatic_translation_target_languages = ""
+ SiteSetting.experimental_content_localization_supported_locales = ""
DiscourseTranslator::PostLocaleDetector.expects(:detect_locale).with(post).returns("en")
DiscourseTranslator::PostTranslator.expects(:translate).never
diff --git a/spec/jobs/detect_translate_topic_spec.rb b/spec/jobs/detect_translate_topic_spec.rb
index 01255fc1..5fdf030b 100644
--- a/spec/jobs/detect_translate_topic_spec.rb
+++ b/spec/jobs/detect_translate_topic_spec.rb
@@ -10,7 +10,7 @@
SiteSetting.translator_enabled = true
SiteSetting.experimental_content_translation = true
SiteSetting.automatic_translation_backfill_rate = 1
- SiteSetting.automatic_translation_target_languages = locales.join("|")
+ SiteSetting.experimental_content_localization_supported_locales = locales.join("|")
end
it "does nothing when translator is disabled" do
@@ -45,7 +45,7 @@
end
it "does not translate when no target languages are configured" do
- SiteSetting.automatic_translation_target_languages = ""
+ SiteSetting.experimental_content_localization_supported_locales = ""
DiscourseTranslator::TopicLocaleDetector.expects(:detect_locale).with(topic).returns("en")
DiscourseTranslator::TopicTranslator.expects(:translate).never
diff --git a/spec/jobs/post_translation_backfill_spec.rb b/spec/jobs/post_translation_backfill_spec.rb
index dd95a79e..e7dba829 100644
--- a/spec/jobs/post_translation_backfill_spec.rb
+++ b/spec/jobs/post_translation_backfill_spec.rb
@@ -3,7 +3,7 @@
describe Jobs::PostTranslationBackfill do
before do
SiteSetting.automatic_translation_backfill_rate = 100
- SiteSetting.automatic_translation_target_languages = "en"
+ SiteSetting.experimental_content_localization_supported_locales = "en"
end
it "does not enqueue post translation when translator disabled" do
@@ -26,7 +26,7 @@
it "does not enqueue psot translation if backfill languages are not set" do
SiteSetting.translator_enabled = true
SiteSetting.experimental_content_translation = true
- SiteSetting.automatic_translation_target_languages = ""
+ SiteSetting.experimental_content_localization_supported_locales = ""
described_class.new.execute({})
diff --git a/spec/jobs/translate_categories_spec.rb b/spec/jobs/translate_categories_spec.rb
index b83bbec0..f2891641 100644
--- a/spec/jobs/translate_categories_spec.rb
+++ b/spec/jobs/translate_categories_spec.rb
@@ -15,7 +15,7 @@ def localize_all_categories(*locales)
SiteSetting.translator_enabled = true
SiteSetting.experimental_content_translation = true
SiteSetting.automatic_translation_backfill_rate = 100
- SiteSetting.automatic_translation_target_languages = "pt|zh_CN"
+ SiteSetting.experimental_content_localization_supported_locales = "pt|zh_CN"
DiscourseTranslator::Provider.stubs(:get).returns(translator)
Jobs.run_immediately!
@@ -38,7 +38,7 @@ def localize_all_categories(*locales)
end
it "does nothing when no target languages are configured" do
- SiteSetting.automatic_translation_target_languages = ""
+ SiteSetting.experimental_content_localization_supported_locales = ""
translator.expects(:translate_text!).never
diff --git a/spec/jobs/translate_posts_spec.rb b/spec/jobs/translate_posts_spec.rb
index a44ba350..3c542475 100644
--- a/spec/jobs/translate_posts_spec.rb
+++ b/spec/jobs/translate_posts_spec.rb
@@ -10,7 +10,7 @@
SiteSetting.translator_enabled = true
SiteSetting.experimental_content_translation = true
SiteSetting.automatic_translation_backfill_rate = 1
- SiteSetting.automatic_translation_target_languages = locales.join("|")
+ SiteSetting.experimental_content_localization_supported_locales = locales.join("|")
end
it "does nothing when translator is disabled" do
@@ -28,7 +28,7 @@
end
it "does nothing when no target languages are configured" do
- SiteSetting.automatic_translation_target_languages = ""
+ SiteSetting.experimental_content_localization_supported_locales = ""
DiscourseTranslator::PostTranslator.expects(:translate).never
job.execute({})
diff --git a/spec/jobs/translate_topics_spec.rb b/spec/jobs/translate_topics_spec.rb
index 7135a909..d8b3ca0a 100644
--- a/spec/jobs/translate_topics_spec.rb
+++ b/spec/jobs/translate_topics_spec.rb
@@ -10,7 +10,7 @@
SiteSetting.translator_enabled = true
SiteSetting.experimental_content_translation = true
SiteSetting.automatic_translation_backfill_rate = 1
- SiteSetting.automatic_translation_target_languages = locales.join("|")
+ SiteSetting.experimental_content_localization_supported_locales = locales.join("|")
end
it "does nothing when translator is disabled" do
@@ -28,7 +28,7 @@
end
it "does nothing when no target languages are configured" do
- SiteSetting.automatic_translation_target_languages = ""
+ SiteSetting.experimental_content_localization_supported_locales = ""
DiscourseTranslator::TopicTranslator.expects(:translate).never
job.execute({})
diff --git a/spec/system/anon_language_switcher_spec.rb b/spec/system/anon_language_switcher_spec.rb
deleted file mode 100644
index 8844b4d3..00000000
--- a/spec/system/anon_language_switcher_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe "Anonymous user language switcher", type: :system do
- SWITCHER_SELECTOR = "button[data-identifier='discourse-translator_language-switcher']"
-
- let(:topic_page) { PageObjects::Pages::Topic.new }
- let(:switcher) { PageObjects::Components::DMenu.new(SWITCHER_SELECTOR) }
-
- fab!(:japanese_user) { Fabricate(:user, locale: "ja") }
- fab!(:topic) do
- topic = Fabricate(:topic, title: "Life strategies from The Art of War")
- Fabricate(:post, topic:)
- topic
- end
-
- before do
- SiteSetting.translator_enabled = true
- SiteSetting.allow_user_locale = true
- SiteSetting.set_locale_from_cookie = true
- SiteSetting.automatic_translation_backfill_rate = 1
- end
-
- it "only shows the language switcher based on what is in target languages" do
- SiteSetting.automatic_translation_target_languages = "es|ja"
- SiteSetting.experimental_anon_language_switcher = true
- visit("/")
-
- expect(page).to have_css(SWITCHER_SELECTOR)
-
- switcher.expand
- expect(switcher).to have_content("日本語")
- expect(switcher).to have_content("Español")
-
- SiteSetting.automatic_translation_target_languages = "es"
- visit("/")
-
- switcher.expand
- expect(switcher).not_to have_content("日本語")
- end
-end
diff --git a/spec/system/site_settings_validation_spec.rb b/spec/system/site_settings_validation_spec.rb
deleted file mode 100644
index 36322060..00000000
--- a/spec/system/site_settings_validation_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe "Translation settings", type: :system do
- fab!(:admin)
-
- before do
- sign_in(admin)
- SiteSetting.translator_enabled = true
- end
-
- it "warns when automatic_translation_target_languages is being set but backfill limit is 0" do
- visit(
- "/admin/plugins/discourse-translator/settings?filter=automatic%20translation%20target%20languages",
- )
-
- setting =
- PageObjects::Components::SelectKit.new(
- "[data-setting='automatic_translation_target_languages'] .select-kit",
- )
- setting.expand
- setting.select_row_by_value("ja")
-
- page.find(".setting-controls button.ok").click()
-
- expect(page).to have_content(I18n.t("site_settings.errors.needs_nonzero_backfill"))
- end
-end