Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Implement simpler and faster freeze check for translations - #55154

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze
Sep 6, 2025
Merged

Implement simpler and faster freeze check for translations#55154
potiuk merged 1 commit into
apache:mainfrom
potiuk:simpler-translation-freeze

Conversation

@potiuk

Copy link
Copy Markdown
Member

This is follow-up after #55119 - implements the translation freeze quite a bit simpler and faster:

  • uses selective checks (fail fast)
  • does not check the dates (we will set the flag to False when freeze time passes
  • you can bypass the freeze with a label rather than having to commit exemption file

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@potiuk

Copy link
Copy Markdown
MemberAuthor

The failure is actually[ a demo how it will work:

  1. First it failed (fast) with:
Screenshot 2025-09-01 at 18 38 01
  1. Then I am going to add a label and close/reopen

@potiukpotiuk added the allow translation change This label should be set if we want to bypass translation freeze and change english translations. label Sep 1, 2025
@potiukpotiuk closed this Sep 1, 2025
@potiukpotiuk reopened this Sep 1, 2025
@potiuk

Copy link
Copy Markdown
MemberAuthor
  1. Now it nicely works after I set the label:
Screenshot 2025-09-01 at 18 40 20

@potiuk
potiuk requested a review from shahar1September 1, 2025 16:41
Comment threaddev/i18n/check_translations_completeness.py

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement. (selective checks, flag + label)

Comment threaddev/breeze/src/airflow_breeze/utils/selective_checks.py Outdated

@pierrejeambrunpierrejeambrun left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect the workflows files to be updated accordingly, am I missing something? (I guess I am, can't remember how that ui_english_translation_changed props is invoked)

@potiuk
potiukforce-pushed the simpler-translation-freeze branch 6 times, most recently from bb1cd5d to b25c05fCompareSeptember 4, 2025 00:25
@potiuk

Copy link
Copy Markdown
MemberAuthor

Also just to illustrate my point: I rebased my change on top of main and fixed the remaining TODO. And you can already see how brittle the "_freeze_exemptions" is and how it blocks things from being fixed.

there were three things added to _freeze_exemptions:

"hitl": {
"requiredActionCount_one": "Required Action ({{count}})",
"requiredActionCount_other": "Required Actions ({{count}})",
"state": {
"noResponseReceived": "No Response Received"
}
},

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not). So that's already somewhat a discrepancy. And if you can look at my PR #55234 where I am closing the gap. The translation for "requiredActionCount" is added - because it was also added to en translation, but I do not have "noResponseReceived".

So as translator I basically ENOCARE whether I am workign towards a moving target or not - what I care about is that when I run the translation tool, I translate everything missing.

Also I think freeze_exemptions adds quite some complexity. We simply - for example - do not need the "hitl:" prefix - we referred in a few places with the the hitl: because we had to also add "_freeze_examptions" to "useTranslate" - but if we get rid of it, we can simplify those almost everywhere (except the menu).

BTW. I also found one missing "dags:" prefix and unused "common" in useTranslations.

@shahar1

Copy link
Copy Markdown
Contributor

But if you look closer, requiredActionCount_one , requiredActionCount_other - were also added to en/hitl.json (but noResponseReceived was not).

Adding these terms should have triggered the pre-commit and fail the PR that added them - it didn't happened since the specific PR that added these terms was merged without rebasing from main :)
After some rethinking - maybe the current freeze concept is indeed too strict and complex to handle. Maybe instead we could adjust the check_translations_completeness to compare the existing keys*, between the current state of main and when the freeze starts (=specified by commit SHA). That way we'll be able to have constant way of measuring completeness before release, while allowing making additions/modifications where needed.

* - We will have to ask avoiding removal of existing keys during this freeze, because then it could change the calculation...but I think it's the least worst.

WDYT?

@shahar1shahar1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

@potiuk

Copy link
Copy Markdown
MemberAuthor

Small update to translation being done during freeze time.

After I merge this one (agreed with @shahar1) -> we are going to allow merging english new translations during freeze, but:

  • A maintainer will have to expliclity set allow translation change label on the PR (without it - such PR will fail very early)
  • When translation is merged, the one who merges it should ping in the #i18n slack channel that there is a new translation added during freeze

This should let us all know quickly when new translation is added, and give us more time, also fiddling with the _freeze_exemptions.json is removed - it's not been quite clear how to deal with it.

I tried to add every person from the translator's list to the #i18n but I failed to match some of the github names to the slack users - so please take a look at slack and add yourself to the #i18n channel if you are not there.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Following my last comment - I'm OK with giving up on the _freeze_exemptions concept :)
Thanks Jarek! (CI currently fails probably due to small issue)

Yeah - it was becaue some languages already had _freeze_exemptions.json - and (it was a bit inconsistent again) in some of those the translations were also in the "regular" files in some they were not (another reason why freeze_exemptions was generally a bit flawed).

I removed those and merged-in translations from those `_freeze_exempltions.json" that needed to be merged.

This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
@potiuk
potiukforce-pushed the simpler-translation-freeze branch from 7e11d13 to 7c32b28CompareSeptember 6, 2025 11:55
@potiuk

potiuk commented Sep 6, 2025

Copy link
Copy Markdown
MemberAuthor

Also @shahar1 -> as part of this PR i updated (and reformatted to fit 110 characters per line) README.md for i18n with referencese and description of:

  • freeze time
  • label
  • the #18n channel in slack

Once we merge it, I will also drop a note on devlist.

@potiuk

Copy link
Copy Markdown
MemberAuthor

Known failure - being fixed in main,

@potiuk
potiuk merged commit 8d7cc72 into apache:mainSep 6, 2025
98 of 105 checks passed
@potiuk
potiuk deleted the simpler-translation-freeze branch September 6, 2025 12:43
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-0-test. View the failure log Run details

StatusBranchResult
v3-0-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 8d7cc72 v3-0-test

This should apply the commit to the v3-0-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

@potiuk

Copy link
Copy Markdown
MemberAuthor

no backport

potiuk added a commit to potiuk/airflow that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
potiuk added a commit that referenced this pull request Sep 6, 2025
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after #55154
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
mangal-vairalkar pushed a commit to mangal-vairalkar/airflow that referenced this pull request Sep 7, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
RoyLee1224 added a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
)
This is follow-up after apache#55119 - implements the translation freeze
quite a bit simpler and faster:
* uses selective checks (fail fast)
* does not check the dates (we will set the flag to False when freeze
time passes
* you can bypass the freeze with a label rather than having to
commit exemption file
RoyLee1224 pushed a commit to RoyLee1224/airflow that referenced this pull request Sep 8, 2025
…he#55325)
When we run with "translation-changing" commit in a canary run,
we should not fail the build as the change has already been
deliberately merged (likely with "allow translation changes" label).
Follow-up after apache#55154
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

allow translation changeThis label should be set if we want to bypass translation freeze and change english translations.area:dev-toolsarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@potiuk@shahar1@pierrejeambrun@jscheffl