#6203 - Initial support for localization and pluralization with go-i18n-JSON-v2 format - forgejo/forgejo - Codeberg.org
forgejo
forgejo
Fork
You've already forked forgejo
737
Code
Issues
1.3k
Pull requests
153
Projects
Releases
100
Packages
Activity
Actions
82
Initial support for localization and pluralization with go-i18n-JSON-v2 format
#6203
Merged
0ko
merged 1 commit from
Nordfriese/forgejo:goi18n
into
forgejo
2025-01-18 06:51:24 +01:00
Conversation
30
Commits
Files changed
61
+1317
-51
Nordfriese
commented
2024-12-08 18:36:14 +01:00
Contributor
Copy link
Re
#5548
This adds initial support for translations in go-i18n JSON v2 format, which offers us proper plural forms.
I initially migrated only a very small selection of strings to the new JSON files, and for English only removed them from the old INI file.
The translation system prefers new-style translations if present, and falls back to the old-style translations otherwise.
A bash script to migrate strings (requiring
jq
) is included.
Migration is not just search-and-replace since the existing
TrN
function with its multiple explicit keys is obsolete for the new style, so instead of kludging
TrN
, I opted to make a new function
TrPluralString
for new style pluralized strings, and kept
TrN
unchanged for old-style strings.
This PR has some overlap with
#6154
, especially concerning plural form handling.
As already noted there, there are some inconsistencies in various sources for plural rule definitions. This PR uses the definitions as they appear in the Weblate project.
Checklist
The
contributor guide
contains information that will be helpful to first time contributors. There also are a few
conditions for merging Pull Requests in Forgejo repositories
. You are also welcome to join the
Forgejo development chatroom
Tests
I added test coverage for Go changes...
I added test coverage for JavaScript changes...
Documentation
I created a pull request
to the documentation
to explain to Forgejo users how to use this change.
I did not document these changes and I do not expect someone else to do it.
Release notes
I do not want this change to show in the release notes.
I want the title to show in the release notes with a link to this pull request.
I want the content of the
release-notes/
to be be used for the release notes instead of the title.
Release notes
Features
PR
: Initial support for localization and pluralization with go-i18n-JSON-v2 format
Re #5548
This adds initial support for translations in go-i18n JSON v2 format, which offers us proper plural forms.
I initially migrated only a very small selection of strings to the new JSON files, and for English only removed them from the old INI file.
The translation system prefers new-style translations if present, and falls back to the old-style translations otherwise.
A bash script to migrate strings (requiring `jq`) is included.
Migration is not just search-and-replace since the existing `TrN` function with its multiple explicit keys is obsolete for the new style, so instead of kludging `TrN`, I opted to make a new function `TrPluralString` for new style pluralized strings, and kept `TrN` unchanged for old-style strings.
This PR has some overlap with #6154, especially concerning plural form handling.
As already noted there, there are some inconsistencies in various sources for plural rule definitions. This PR uses the definitions as they appear in the Weblate project.
## Checklist
The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).
### Tests
- I added test coverage for Go changes...
- [x] in their respective `*_test.go` for unit tests.
- [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I added test coverage for JavaScript changes...
- [ ] in `web_src/js/*.test.js` if it can be unit tested.
- [ ] in `tests/e2e/*.test.e2e.js` if it requires interactions with a live Forgejo server (see also the [developer guide for JavaScript testing](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md#end-to-end-tests)).
### Documentation
- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.
### Release notes
- [x] I do not want this change to show in the release notes.
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/
## Release notes
- Features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6203): Initial support for localization and pluralization with go-i18n-JSON-v2 format
Nordfriese
added the
test
needed
label
2024-12-08 18:36:14 +01:00
Nordfriese
requested reviews from
crystal
Gusted
fnetX
caesar
2024-12-08 18:36:17 +01:00
0ko
2024-12-08 19:13:42 +01:00
added the
enhancement/feature
forgejo/i18n
labels
requested review from
0ko
0ko
reviewed
2024-12-08 20:02:51 +01:00
go.sum
Outdated
@ -45,2 +45,4 @@
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8=
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU=
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
0ko
commented
2024-12-08 20:02:51 +01:00
Owner
Copy link
That's an interesting import.
From Weblate documentation, it seems like it only supports JSON, but I think it may worth to try out TOML.
That's an interesting import.
From Weblate documentation, it seems like it only supports JSON, but I think it may worth to try out TOML.
0ko
commented
2024-12-08 20:10:16 +01:00
Owner
Copy link
I've dumped all variants Weblate proposed on component creation and unfortunately they do not mention TOML.
I've dumped all variants Weblate proposed on component creation and unfortunately they do not mention TOML.
0ko
marked this conversation as resolved
0ko
commented
2024-12-08 20:03:02 +01:00
Owner
Copy link
I think it will make sense to force-migrate strings instead of providing a fallback. Not all languages are maintained, so they won't migrate fully naturally.
That will require making some tooling..
Thank you a lot for picking this up!
I think it will make sense to force-migrate strings instead of providing a fallback. Not all languages are maintained, so they won't migrate fully naturally.
That will require making some tooling..
---
Thank you a lot for picking this up!
0ko
reviewed
2024-12-08 20:04:51 +01:00
modules/translation/i18n/dummy.go
Outdated
@ -44,2 +31,4 @@
// TrPluralString implements Locale.
func
KeyLocale
TrPluralString
trKey
string
count
any
allowFallbackToDefaultLang
bool
trArgs
...
any
template
HTML
error
0ko
commented
2024-12-08 20:04:51 +01:00
Owner
Copy link
Is there a good reason for
allowFallbackToDefaultLang
to be available and not true?
Is there a good reason for `allowFallbackToDefaultLang` to be available and not true?
0ko
marked this conversation as resolved
0ko
reviewed
2024-12-08 20:06:25 +01:00
modules/translation/i18n/localestore.go
Outdated
@ -41,0 +54,4 @@
and
their
plural
rules
and
does
not
support
languages
not
hardcoded
there
So
we
pretend
that
all
languages
are
and
use
our
own
function
to
extract
the
correct
plural
form
for
given
count
and
language
0ko
commented
2024-12-08 20:06:25 +01:00
Owner
Copy link
With this workaround in place, does go-i18n give us any actual advantage over gotext?
With this workaround in place, does go-i18n give us any actual advantage over gotext?
0ko
reviewed
2024-12-08 20:12:26 +01:00
modules/translation/translation.go
Outdated
@ -105,0 +109,4 @@
log
Error
"Failed to set old-style messages to %s: %v"
setting
Langs
err
key
"locale_new/locale_"
setting
Langs
".json"
0ko
commented
2024-12-08 20:12:26 +01:00
Owner
Copy link
I propose to name the new folder
locale_next
or
locales
I propose to name the new folder `locale_next` or `locales`.
0ko
marked this conversation as resolved
0ko
commented
2024-12-08 20:13:50 +01:00
Owner
Copy link
Tested on
, basic features seem to work well.
Tested on https://translate.codeberg.org/projects/forgejo-experimental/next, basic features seem to work well.
0ko
commented
2024-12-08 20:20:27 +01:00
Owner
Copy link
there are some inconsistencies in various sources for plural rule definitions. For example, GNU claims Irish has 3 forms while Weblate and CLDR say there are 5. Weblate also specifies 3 forms for French while CLDR says there are 2
Looks like you've checked the older version of CLDR. v22 says French has 2 but v46 says that there are 3.
Regarding GNU, I would trust it less than CLDR (and Weblate).
> there are some inconsistencies in various sources for plural rule definitions. For example, GNU claims Irish has 3 forms while Weblate and CLDR say there are 5. Weblate also specifies 3 forms for French while CLDR says there are 2
Looks like you've checked the older version of CLDR. v22 says French has 2 but v46 says that there are 3.
Regarding GNU, I would trust it less than CLDR (and Weblate).
Nordfriese
force-pushed goi18n from
894e047411
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
/ release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Failing after 13s
Details
testing / backend-checks (pull_request)
Failing after 1m49s
Details
testing / test-unit (pull_request)
Has been skipped
Details
testing / test-e2e (pull_request)
Has been skipped
Details
testing / test-mysql (pull_request)
Has been skipped
Details
testing / test-pgsql (pull_request)
Has been skipped
Details
testing / test-sqlite (pull_request)
Has been skipped
Details
testing / test-remote-cacher (redis) (pull_request)
Has been skipped
Details
testing / test-remote-cacher (valkey) (pull_request)
Has been skipped
Details
testing / test-remote-cacher (garnet) (pull_request)
Has been skipped
Details
testing / test-remote-cacher (redict) (pull_request)
Has been skipped
Details
testing / security-check (pull_request)
Has been skipped
Details
to
f94f0a2168
Some checks failed
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
requirements / merge-conditions (pull_request)
Failing after 3s
Details
testing / frontend-checks (pull_request)
Successful in 56s
Details
testing / backend-checks (pull_request)
Successful in 3m8s
Details
testing / test-unit (pull_request)
Successful in 3m45s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m10s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m12s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m13s
Details
testing / test-e2e (pull_request)
Successful in 5m18s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m9s
Details
testing / test-mysql (pull_request)
Successful in 16m7s
Details
testing / test-sqlite (pull_request)
Successful in 17m40s
Details
testing / test-pgsql (pull_request)
Successful in 20m58s
Details
testing / security-check (pull_request)
Successful in 57s
Details
2024-12-13 18:13:31 +01:00
Compare
Nordfriese
changed title from
Initial support for localization and pluralization with go-i18n in JSON format
to
Initial support for localization and pluralization with go-i18n-JSON-v2 format
2024-12-13 18:14:09 +01:00
Nordfriese
commented
2024-12-13 19:02:36 +01:00
Author
Contributor
Copy link
Thanks for the suggestions. I added a tool to automatically migrate strings from INI to JSON and delete them from the INI, though unfortunately the tool also reordered all other strings in the INI. Will have to look into this aggain as this would guarantee unnecessary merge conflicts.
I also removed the dependency on go-i18n since this doesn't really use it for anything beyond JSON parsing that we can do using the json import.
Regarding plural rules, I suppose the best way to ensure consistency might be to just copy the definitions made by Weblate in
If that's OK, I would implement the definitions from there both in this branch and in
#6154
Regarding gotext, I could not figure out how to use it, but I don't think it would offer any real advantages here – we still have to hardcode the plural forms in JavaScript for strings that are assembled in the frontend (as in
#6154
), and IMHO it would be safer not to leave both variants up to separate implementations; if we hardcode the rules for both Go and JS, we can ensure more easily that they match each other and Weblate's definitions.
Thanks for the suggestions. I added a tool to automatically migrate strings from INI to JSON and delete them from the INI, though unfortunately the tool also reordered all other strings in the INI. Will have to look into this aggain as this would guarantee unnecessary merge conflicts.
I also removed the dependency on go-i18n since this doesn't really use it for anything beyond JSON parsing that we can do using the json import.
Regarding plural rules, I suppose the best way to ensure consistency might be to just copy the definitions made by Weblate in
If that's OK, I would implement the definitions from there both in this branch and in #6154.
Regarding gotext, I could not figure out how to use it, but I don't think it would offer any real advantages here – we still have to hardcode the plural forms in JavaScript for strings that are assembled in the frontend (as in #6154), and IMHO it would be safer not to leave both variants up to separate implementations; if we hardcode the rules for both Go and JS, we can ensure more easily that they match each other and Weblate's definitions.
Nordfriese
force-pushed goi18n from
f94f0a2168
Some checks failed
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
requirements / merge-conditions (pull_request)
Failing after 3s
Details
testing / frontend-checks (pull_request)
Successful in 56s
Details
testing / backend-checks (pull_request)
Successful in 3m8s
Details
testing / test-unit (pull_request)
Successful in 3m45s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m10s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m12s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m13s
Details
testing / test-e2e (pull_request)
Successful in 5m18s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m9s
Details
testing / test-mysql (pull_request)
Successful in 16m7s
Details
testing / test-sqlite (pull_request)
Successful in 17m40s
Details
testing / test-pgsql (pull_request)
Successful in 20m58s
Details
testing / security-check (pull_request)
Successful in 57s
Details
to
6256da04fc
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 54s
Details
testing / backend-checks (pull_request)
Successful in 3m1s
Details
testing / test-unit (pull_request)
Successful in 5m30s
Details
testing / test-e2e (pull_request)
Successful in 5m31s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m2s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m1s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m3s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m4s
Details
testing / test-mysql (pull_request)
Successful in 19m47s
Details
testing / test-sqlite (pull_request)
Successful in 21m9s
Details
testing / test-pgsql (pull_request)
Successful in 24m41s
Details
testing / security-check (pull_request)
Successful in 1m8s
Details
2024-12-14 16:31:33 +01:00
Compare
Nordfriese
commented
2024-12-14 16:34:43 +01:00
Author
Contributor
Copy link
I pulled the plural definitions for all languages currently supported by Forgejo from the Codeberg Translate project. Attached is a spreadsheet with the list, and I pushed a commit to adapt the rules of this branch to Weblate's definitions. I trust/hope that Weblate knows best which forms belong to which language…
Will update
#6154
with the same rules.
I pulled the plural definitions for all languages currently supported by Forgejo from the Codeberg Translate project. Attached is a spreadsheet with the list, and I pushed a commit to adapt the rules of this branch to Weblate's definitions. I trust/hope that Weblate knows best which forms belong to which language…
Will update #6154 with the same rules.
language_codes.ods
26 KiB
0ko
commented
2024-12-17 07:21:37 +01:00
Owner
Copy link
I don't think some will particularly like addition of a .py file to the repository
BTW, I also made a similar tool recently for a different purpose:
There's no immideate need to remove the migrated strings from all locales. English is fine. Weblate picks that up and makes them invisible. The script above can do a cleanup at a later point without reordering all strings..
So you don't really need to override any of the .INI files, just remove a few lines from the en-US one.
I don't think some will particularly like addition of a .py file to the repository
BTW, I also made a similar tool recently for a different purpose: https://codeberg.org/0ko/forgejo-snippets/src/branch/main/scripts/i18n-migrator
There's no immideate need to remove the migrated strings from all locales. English is fine. Weblate picks that up and makes them invisible. The script above can do a cleanup at a later point without reordering all strings..
So you don't really need to override any of the .INI files, just remove a few lines from the en-US one.
0ko
reviewed
2024-12-17 07:24:34 +01:00
options/locale_next/locale_ru-RU.json
Outdated
@ -0,0 +35,4 @@
"repo.pulls.title_desc"
"one"
"\u0445\u043e\u0447\u0435\u0442 \u0432\u043b\u0438\u0442\u044c %[1]d \u043a\u043e\u043c\u043c\u0438\u0442 \u0438\u0437 %[2]s \u0432 %[3]s"
"other"
"\u0445\u043e\u0447\u0435\u0442 \u0432\u043b\u0438\u0442\u044c %[1]d \u043a\u043e\u043c\u043c\u0438\u0442(\u043e\u0432) \u0438\u0437 %[2]s \u0432 %[3]s"
0ko
commented
2024-12-17 07:24:34 +01:00
Owner
Copy link
Pass
ensure_ascii=False
to json.dump. That is aligned with Weblate output.
Pass `ensure_ascii=False` to json.dump. That is aligned with Weblate output.
Nordfriese
commented
2024-12-17 14:58:09 +01:00
Author
Contributor
Copy link
All done. I dropped the python script and wrote a Bash script with
read
sed
and
jq
instead, which is a bit slow but produces better output.
And I reverted all the unnecessary changes to the INI files.
All done. I dropped the python script and wrote a Bash script with `read`, `sed` and `jq` instead, which is a bit slow but produces better output.
And I reverted all the unnecessary changes to the INI files.
0ko
marked this conversation as resolved
Nordfriese
force-pushed goi18n from
6256da04fc
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 54s
Details
testing / backend-checks (pull_request)
Successful in 3m1s
Details
testing / test-unit (pull_request)
Successful in 5m30s
Details
testing / test-e2e (pull_request)
Successful in 5m31s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m2s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m1s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m3s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m4s
Details
testing / test-mysql (pull_request)
Successful in 19m47s
Details
testing / test-sqlite (pull_request)
Successful in 21m9s
Details
testing / test-pgsql (pull_request)
Successful in 24m41s
Details
testing / security-check (pull_request)
Successful in 1m8s
Details
to
43f75f1ea1
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 1s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 58s
Details
testing / backend-checks (pull_request)
Successful in 2m52s
Details
testing / test-unit (pull_request)
Successful in 5m47s
Details
testing / test-e2e (pull_request)
Successful in 6m7s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m1s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 2m4s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 2m0s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 2m4s
Details
testing / test-mysql (pull_request)
Successful in 21m7s
Details
testing / test-sqlite (pull_request)
Successful in 22m20s
Details
testing / test-pgsql (pull_request)
Successful in 26m8s
Details
testing / security-check (pull_request)
Successful in 1m3s
Details
2024-12-17 14:55:40 +01:00
Compare
0ko
commented
2024-12-17 15:08:15 +01:00
Owner
Copy link
Thanks! I'll try to do more reviewing in the next few days.
Some questions:
do you consider the existing testing coverage as enough?
do you aim to have this merged for v10? The feature freeze is Dec 25. But I think it can be convenient to do the string conversion at scale while v11 dev cycle lasts.
Thanks! I'll try to do more reviewing in the next few days.
Some questions:
* do you consider the existing testing coverage as enough?
* do you aim to have this merged for v10? The feature freeze is Dec 25. But I think it can be convenient to do the string conversion at scale while v11 dev cycle lasts.
Nordfriese
force-pushed goi18n from
43f75f1ea1
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 1s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 58s
Details
testing / backend-checks (pull_request)
Successful in 2m52s
Details
testing / test-unit (pull_request)
Successful in 5m47s
Details
testing / test-e2e (pull_request)
Successful in 6m7s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m1s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 2m4s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 2m0s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 2m4s
Details
testing / test-mysql (pull_request)
Successful in 21m7s
Details
testing / test-sqlite (pull_request)
Successful in 22m20s
Details
testing / test-pgsql (pull_request)
Successful in 26m8s
Details
testing / security-check (pull_request)
Successful in 1m3s
Details
to
8a68b2641b
Some checks failed
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
requirements / merge-conditions (pull_request)
Failing after 5s
Details
testing / frontend-checks (pull_request)
Successful in 1m9s
Details
testing / backend-checks (pull_request)
Successful in 5m4s
Details
testing / test-e2e (pull_request)
Failing after 8m0s
Details
testing / test-unit (pull_request)
Successful in 8m52s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m57s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 3m1s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 3m26s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 3m24s
Details
testing / test-mysql (pull_request)
Successful in 30m18s
Details
testing / test-sqlite (pull_request)
Failing after 30m54s
Details
testing / test-pgsql (pull_request)
Successful in 36m15s
Details
testing / security-check (pull_request)
Has been skipped
Details
2024-12-18 13:04:13 +01:00
Compare
Nordfriese
commented
2024-12-18 13:11:15 +01:00
Author
Contributor
Copy link
There are tests for parsing translations in JSON format and for getting pluralized and non-pluralized translations from it under a mock plural rule. I now added some tests for the language to plural rule mapping and for the behaviour of each plural rule. This should be enough, I suppose.
One request, could you please update the forgejo-experimental/next weblate project with the current translations of this branch? I'd like to check whether weblate generates flat or nested objects.
Since translation keys have lots of periods in them, this can be represented in JSON as either
"repo.issues.num_participants"
"one"
"%d participant"
"other"
"%d participants"
or
"repo"
"issues"
"num_participants"
"one"
"%d participant"
"other"
"%d participants"
Currently I assume the JSON tree is always in the first format… it would be helpful to check if weblate might arbitrarily nest this in which case I'll have to adapt the parsing function to allow this. If weblate can be configured to always emit the first syntax it would keep the parsing code simpler.
There are tests for parsing translations in JSON format and for getting pluralized and non-pluralized translations from it under a mock plural rule. I now added some tests for the language to plural rule mapping and for the behaviour of each plural rule. This should be enough, I suppose.
One request, could you please update the forgejo-experimental/next weblate project with the current translations of this branch? I'd like to check whether weblate generates flat or nested objects.
Since translation keys have lots of periods in them, this can be represented in JSON as either
```json
"repo.issues.num_participants": {
"one": "%d participant",
"other": "%d participants"
```
or
```json
"repo": {
"issues": {
"num_participants": {
"one": "%d participant",
"other": "%d participants"
```
Currently I assume the JSON tree is always in the first format… it would be helpful to check if weblate might arbitrarily nest this in which case I'll have to adapt the parsing function to allow this. If weblate can be configured to always emit the first syntax it would keep the parsing code simpler.
0ko
commented
2024-12-18 13:27:17 +01:00
Owner
Copy link
Updated. It looks like Weblate tries to normalize output into a tree structure if a language gets updated on Weblate.
So:
scanned locales
downloaded cz file, it wasn't well nested and had dots
translated cz
downloaded again, now it's fully nested
Updated. It looks like Weblate tries to normalize output into a tree structure if a language gets updated on Weblate.
So:
* scanned locales
* downloaded cz file, it wasn't well nested and had dots
* translated cz
* downloaded again, now it's fully nested
Nordfriese
commented
2024-12-18 13:53:11 +01:00
Author
Contributor
Copy link
Thanks. I updated the code and unit test to handle this structure.
Thanks. I updated the code and unit test to handle this structure.
Nordfriese
force-pushed goi18n from
e88de9d08f
Some checks failed
testing / frontend-checks (pull_request)
Successful in 53s
Details
testing / backend-checks (pull_request)
Successful in 3m9s
Details
testing / test-unit (pull_request)
Successful in 4m55s
Details
testing / test-e2e (pull_request)
Successful in 5m3s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m43s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m41s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m41s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m42s
Details
testing / test-mysql (pull_request)
Successful in 16m44s
Details
testing / test-sqlite (pull_request)
Successful in 18m39s
Details
testing / test-pgsql (pull_request)
Successful in 23m45s
Details
testing / security-check (pull_request)
Successful in 1m22s
Details
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
to
2feea524be
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 45s
Details
testing / backend-checks (pull_request)
Successful in 3m12s
Details
testing / test-unit (pull_request)
Successful in 3m45s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m20s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m18s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m20s
Details
testing / test-e2e (pull_request)
Successful in 5m16s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m20s
Details
testing / test-mysql (pull_request)
Successful in 16m15s
Details
testing / test-sqlite (pull_request)
Successful in 17m31s
Details
testing / test-pgsql (pull_request)
Successful in 22m49s
Details
testing / security-check (pull_request)
Successful in 59s
Details
2024-12-22 09:46:47 +01:00
Compare
Nordfriese
force-pushed goi18n from
2feea524be
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 45s
Details
testing / backend-checks (pull_request)
Successful in 3m12s
Details
testing / test-unit (pull_request)
Successful in 3m45s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m20s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m18s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m20s
Details
testing / test-e2e (pull_request)
Successful in 5m16s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m20s
Details
testing / test-mysql (pull_request)
Successful in 16m15s
Details
testing / test-sqlite (pull_request)
Successful in 17m31s
Details
testing / test-pgsql (pull_request)
Successful in 22m49s
Details
testing / security-check (pull_request)
Successful in 59s
Details
to
0b04637800
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 1s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 50s
Details
testing / backend-checks (pull_request)
Successful in 2m59s
Details
testing / test-e2e (pull_request)
Failing after 4m44s
Details
testing / test-unit (pull_request)
Successful in 4m48s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m12s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 2m11s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m27s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m29s
Details
testing / test-mysql (pull_request)
Successful in 20m26s
Details
testing / test-sqlite (pull_request)
Successful in 21m23s
Details
testing / test-pgsql (pull_request)
Successful in 25m5s
Details
testing / security-check (pull_request)
Successful in 1m8s
Details
2024-12-26 11:19:46 +01:00
Compare
0ko
commented
2024-12-30 16:44:03 +01:00
Owner
Copy link
Hi!
Just want to say that I really appreciate you working on this. I currently don't have a lot of time for reviewing, however I aim to have this merged for v11.
Note to others: review help is appreciated. I don't know the backend part of the codebase that well.
Hi!
Just want to say that I really appreciate you working on this. I currently don't have a lot of time for reviewing, however I aim to have this merged for v11.
Note to others: review help is appreciated. I don't know the backend part of the codebase that well.
0ko
reviewed
2024-12-30 16:48:09 +01:00
modules/translation/plural_rules.go
Outdated
@ -0,0 +52,4 @@
/* When adding a new language not in the list, add its plural rule definition here. */
switch
langName
case
"en"
"bg"
"da"
"de"
"el"
"eo"
"et"
"fi"
"gl"
"hu"
"ml"
"nb"
"nds"
"nl"
"sv"
"tr"
"yi"
0ko
commented
2024-12-30 16:48:09 +01:00
Owner
Copy link
Would it make sense to add more language codes here for languages which we are currently missing, so this code will be more future proof and we will potentially have to touch not every time a language is added?
Same about the JS PR.
Would it make sense to add more language codes here for languages which we are currently missing, so this code will be more future proof and we will potentially have to touch not every time a language is added?
Same about the JS PR.
Nordfriese
commented
2024-12-30 17:39:32 +01:00
Author
Contributor
Copy link
Done. I pulled the language definitions from Weblate and added the codes for all languages that already have one of the 14 currently supported plural rules. That's a total of 597 language codes.
If some of them are added, it might become necessary to change them if the translators request it as some languages have multiple possible rules, but I assume this should be a rare occurrence.
There's only a handful of rare codes with very specialized plural forms that I didn't add.
I also copied this change to the other PR.
Done. I pulled the language definitions from Weblate and added the codes for all languages that already have one of the 14 currently supported plural rules. That's a total of 597 language codes.
If some of them are added, it might become necessary to change them if the translators request it as some languages have multiple possible rules, but I assume this should be a rare occurrence.
There's only a handful of rare codes with very specialized plural forms that I didn't add.
I also copied this change to the other PR.
0ko
commented
2024-12-30 18:36:12 +01:00
Owner
Copy link
How do you pull them? If it's a script, it would be nice to have it in the codebase too so it can be ran to regenerate the rules. Language data isn't static, especially for unpopular languages.
How do you pull them? If it's a script, it would be nice to have it in the codebase too so it can be ran to regenerate the rules. Language data isn't static, especially for unpopular languages.
Nordfriese
commented
2024-12-30 19:11:11 +01:00
Author
Contributor
Copy link
No script involved… I just imported
in LibreOffice Calc and sorted by formula. The rest was searching manually for each of the 14 supported plural rules and copy-pasting all language codes with that rule, except for the ones that were already present.
No script involved… I just imported https://github.com/WeblateOrg/language-data/blob/main/languages.csv in LibreOffice Calc and sorted by formula. The rest was searching manually for each of the 14 supported plural rules and copy-pasting all language codes with that rule, except for the ones that were already present.
0ko
commented
2024-12-30 19:17:26 +01:00
Owner
Copy link
This is will be a good link to have among the useful links.
This is will be a good link to have among the useful links.
Nordfriese
commented
2024-12-30 19:29:37 +01:00
Author
Contributor
Copy link
Added it
Added it
0ko
marked this conversation as resolved
0ko
reviewed
2024-12-30 16:49:40 +01:00
options/locale/locale_en-US.ini
Outdated
@ -1254,4 +1254,2 @@
subscribe.pull.guest.tooltip
Sign in to subscribe to this pull request.
watch
Watch
unwatch
Unwatch
0ko
commented
2024-12-30 16:49:40 +01:00
Owner
Copy link
Are all strings which were moved covered by some integration tests? IIRC some are. But if some are not, I would recommend to not migrate them for now. It's fine if we start a new locale even with just 2 strings, really.
Are all strings which were moved covered by some integration tests? IIRC some are. But if some are not, I would recommend to not migrate them for now. It's fine if we start a new locale even with just 2 strings, really.
Nordfriese
commented
2024-12-30 20:05:01 +01:00
Author
Contributor
Copy link
Done. Now the only strings migrated are
repo.pulls.title_desc
and
repo.pulls.merged_title_desc
(tested in
pull_summary_test.go
) and
search.milestone_kind
(tested in
milestone_test.go
).
Done. Now the only strings migrated are `repo.pulls.title_desc` and `repo.pulls.merged_title_desc` (tested in `pull_summary_test.go`) and `search.milestone_kind` (tested in `milestone_test.go`).
0ko
marked this conversation as resolved
Gusted
commented
2024-12-30 17:17:24 +01:00
Owner
Copy link
Note to others: review help is appreciated. I don't know the backend part of the codebase that well.
I'm still trying to wrap my head around how go-i18n works, but expect a review from me.
> Note to others: review help is appreciated. I don't know the backend part of the codebase that well.
I'm still trying to wrap my head around how go-i18n works, but expect a review from me.
Nordfriese
force-pushed goi18n from
0b04637800
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 1s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 50s
Details
testing / backend-checks (pull_request)
Successful in 2m59s
Details
testing / test-e2e (pull_request)
Failing after 4m44s
Details
testing / test-unit (pull_request)
Successful in 4m48s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m12s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 2m11s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m27s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m29s
Details
testing / test-mysql (pull_request)
Successful in 20m26s
Details
testing / test-sqlite (pull_request)
Successful in 21m23s
Details
testing / test-pgsql (pull_request)
Successful in 25m5s
Details
testing / security-check (pull_request)
Successful in 1m8s
Details
to
bccc05f013
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 1m7s
Details
testing / backend-checks (pull_request)
Successful in 5m48s
Details
Integration tests for the release process / release-simulation (pull_request)
Successful in 6m22s
Details
testing / test-e2e (pull_request)
Failing after 5m35s
Details
testing / test-unit (pull_request)
Successful in 5m37s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m25s
Details
testing / test-mysql (pull_request)
Successful in 26m40s
Details
testing / test-sqlite (pull_request)
Successful in 26m39s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m19s
Details
testing / test-pgsql (pull_request)
Successful in 32m37s
Details
testing / security-check (pull_request)
Successful in 3m15s
Details
2024-12-30 17:31:58 +01:00
Compare
Nordfriese
force-pushed goi18n from
bccc05f013
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 1m7s
Details
testing / backend-checks (pull_request)
Successful in 5m48s
Details
Integration tests for the release process / release-simulation (pull_request)
Successful in 6m22s
Details
testing / test-e2e (pull_request)
Failing after 5m35s
Details
testing / test-unit (pull_request)
Successful in 5m37s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m25s
Details
testing / test-mysql (pull_request)
Successful in 26m40s
Details
testing / test-sqlite (pull_request)
Successful in 26m39s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m19s
Details
testing / test-pgsql (pull_request)
Successful in 32m37s
Details
testing / security-check (pull_request)
Successful in 3m15s
Details
to
6674a3a187
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 49s
Details
testing / backend-checks (pull_request)
Successful in 3m54s
Details
testing / test-unit (pull_request)
Successful in 4m44s
Details
testing / test-e2e (pull_request)
Failing after 4m43s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m23s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m32s
Details
testing / test-mysql (pull_request)
Failing after 20m50s
Details
testing / test-sqlite (pull_request)
Successful in 21m52s
Details
testing / test-pgsql (pull_request)
Successful in 25m30s
Details
testing / security-check (pull_request)
Has been skipped
Details
2024-12-30 19:28:15 +01:00
Compare
Nordfriese
force-pushed goi18n from
6674a3a187
Some checks failed
requirements / merge-conditions (pull_request)
Failing after 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 49s
Details
testing / backend-checks (pull_request)
Successful in 3m54s
Details
testing / test-unit (pull_request)
Successful in 4m44s
Details
testing / test-e2e (pull_request)
Failing after 4m43s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m23s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m22s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m32s
Details
testing / test-mysql (pull_request)
Failing after 20m50s
Details
testing / test-sqlite (pull_request)
Successful in 21m52s
Details
testing / test-pgsql (pull_request)
Successful in 25m30s
Details
testing / security-check (pull_request)
Has been skipped
Details
to
8525c27762
All checks were successful
testing / frontend-checks (pull_request)
Successful in 1m26s
Details
testing / backend-checks (pull_request)
Successful in 6m53s
Details
testing / test-unit (pull_request)
Successful in 4m34s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m44s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m42s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m42s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m45s
Details
testing / test-mysql (pull_request)
Successful in 19m9s
Details
testing / test-sqlite (pull_request)
Successful in 20m13s
Details
testing / test-pgsql (pull_request)
Successful in 24m16s
Details
testing / security-check (pull_request)
Successful in 1m37s
Details
testing / test-e2e (pull_request)
Successful in 2m50s
Details
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / backporting (pull_request_target)
Has been skipped
Details
issue-labels / cascade (pull_request_target)
Has been skipped
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
2024-12-30 20:03:52 +01:00
Compare
0ko
reviewed
2025-01-10 05:44:33 +01:00
modules/translation/translation_test.go
Outdated
@ -51,0 +89,4 @@
assert
Equal
PluralRuleDefault
GetPluralRuleImpl
"invalid"
func
TestApplyPluralRule
testing
0ko
commented
2025-01-10 05:44:33 +01:00
Owner
Copy link
Nit: these can benefit from some for loops with ranges to be less verbose. Search
testCases
for examples.
Nit: these can benefit from some for loops with ranges to be less verbose. Search `testCases` for examples.
0ko
marked this conversation as resolved
0ko
reviewed
2025-01-10 05:55:11 +01:00
options/locale_next/locale_ru-RU.json
Outdated
@ -0,0 +6,4 @@
"repo.pulls.title_desc"
"one"
"хочет влить %[1]d коммит из %[2]s в %[3]s"
"other"
"хочет влить %[1]d коммит(ов) из %[2]s в %[3]s"
0ko
commented
2025-01-10 05:55:11 +01:00
Owner
Copy link
There seems to be an issue with this migration. This locale uses rules with
one/few/many
, but
few
was migrated as
other
. Weblate does, however, interpret them as
few
on import, but I'm not sure if it will normalize the output. So whether they will be fixed by the the next Weblate PR.
There seems to be an issue with this migration. This locale uses rules with `one/few/many`, but `few` was migrated as `other`. Weblate does, however, interpret them as `few` on import, but I'm not sure if it will normalize the output. So whether they will be fixed by the the next Weblate PR.
0ko
approved these changes
2025-01-10 05:58:00 +01:00
Dismissed
0ko
left a comment
Copy link
To me it is mostly functioning well, just some small details of the implementation are left. Thank you for your work so far!
To me it is mostly functioning well, just some small details of the implementation are left. Thank you for your work so far!
0ko
commented
2025-01-10 06:01:15 +01:00
Owner
Copy link
Still would like to see
@Gusted
comment on backend. Also, lack of URL linting should probably be a concern for the new location?
I'm not yet fully sure how to do the merge to avoid merge conflicts and loosing changes, but we'll figure this out.
Still would like to see @Gusted comment on backend. Also, lack of URL linting should probably be a concern for the new location?
I'm not yet fully sure how to do the merge to avoid merge conflicts and loosing changes, but we'll figure this out.
0ko
commented
2025-01-10 06:02:49 +01:00
Owner
Copy link
Testing seems to be plenty, but can you clarify whether the string variation fallbacks are tested? So, when
few
is present but
many
is missing, only
many
falls back to English.
Testing seems to be plenty, but can you clarify whether the string variation fallbacks are tested? So, when `few` is present but `many` is missing, only `many` falls back to English.
0ko
added
test
present
and removed
test
needed
labels
2025-01-10 06:02:58 +01:00
Nordfriese
force-pushed goi18n from
8525c27762
All checks were successful
testing / frontend-checks (pull_request)
Successful in 1m26s
Details
testing / backend-checks (pull_request)
Successful in 6m53s
Details
testing / test-unit (pull_request)
Successful in 4m34s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 1m44s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m42s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m42s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m45s
Details
testing / test-mysql (pull_request)
Successful in 19m9s
Details
testing / test-sqlite (pull_request)
Successful in 20m13s
Details
testing / test-pgsql (pull_request)
Successful in 24m16s
Details
testing / security-check (pull_request)
Successful in 1m37s
Details
testing / test-e2e (pull_request)
Successful in 2m50s
Details
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / backporting (pull_request_target)
Has been skipped
Details
issue-labels / cascade (pull_request_target)
Has been skipped
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
to
2d24578b07
All checks were successful
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 1m5s
Details
testing / backend-checks (pull_request)
Successful in 2m54s
Details
testing / test-e2e (pull_request)
Successful in 3m1s
Details
testing / test-unit (pull_request)
Successful in 3m8s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 57s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 58s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m0s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 59s
Details
testing / test-mysql (pull_request)
Successful in 16m45s
Details
testing / test-sqlite (pull_request)
Successful in 18m11s
Details
testing / test-pgsql (pull_request)
Successful in 22m13s
Details
testing / security-check (pull_request)
Successful in 1m3s
Details
2025-01-10 11:11:51 +01:00
Compare
Nordfriese
commented
2025-01-10 11:13:58 +01:00
Author
Contributor
Copy link
Thank you :)
I updated the tests as suggested and added another testcase for the fallbacks in the case of partial plural forms. I also amended the migration script to use the correct singular and plural form names depending on the language.
Thank you :)
I updated the tests as suggested and added another testcase for the fallbacks in the case of partial plural forms. I also amended the migration script to use the correct singular and plural form names depending on the language.
Gusted
reviewed
2025-01-17 00:23:34 +01:00
Gusted
left a comment
Copy link
Seems mostly fine, but would really like to see that the extra map for plurals is dropped. That will not be a good strategy in the long-term w.r.t. memory usage.
Seems mostly fine, but would really like to see that the extra map for plurals is dropped. That will not be a good strategy in the long-term w.r.t. memory usage.
modules/translation/i18n/i18n.go
Outdated
@ -9,2 +9,4 @@
type
PluralFormIndex
int
Gusted
commented
2025-01-17 00:13:44 +01:00
Owner
Copy link
Can you make this
uint8
? That should help Go with trying to avoid more memory than necessary when creating a
map[PluralFormIndex]
Can you make this `uint8`? That should help Go with trying to avoid more memory than necessary when creating a `map[PluralFormIndex]`.
Gusted
marked this conversation as resolved
modules/translation/i18n/localestore.go
Outdated
@ -20,1 +22,4 @@
idxToMsgMap
map
int
string
// the map idx is generated by store's trKeyToIdxMap
newStyleMessages
map
string
map
PluralFormIndex
string
pluralRule
PluralFormRule
Gusted
commented
2025-01-17 00:21:06 +01:00
Owner
Copy link
Does this necessary have to be a pointer? Storing a function directly is also fine.
Does this necessary have to be a pointer? Storing a function directly is also fine.
Gusted
marked this conversation as resolved
modules/translation/i18n/localestore.go
Outdated
@ -38,8 +43,16 @@ func NewLocaleStore() LocaleStore {
return
localeStore
localeMap
make
map
string
locale
trKeyToIdxMap
make
map
string
int
note
about
pluralization
rules
Gusted
commented
2025-01-17 00:10:33 +01:00
Owner
Copy link
For Go files we use don't use
/*
for comments, please change it to
//
For Go files we use don't use `/*` for comments, please change it to `//`
Gusted
marked this conversation as resolved
modules/translation/i18n/localestore.go
Outdated
@ -81,0 +108,4 @@
index
:=
PluralFormOther
isPlural
:=
true
switch
key
Gusted
commented
2025-01-17 00:19:02 +01:00
Owner
Copy link
Now looking at this code, it feels a bit arbitrary to add another map for plurals. It seems to me that it can simply be added to the
prefix
string as a suffix,
prefix + ":zero"
for example. This would greatly reduce the amount of memory the new translations will take in by avoiding allocating plural maps for every string.
Now looking at this code, it feels a bit arbitrary to add another map for plurals. It seems to me that it can simply be added to the `prefix` string as a suffix, `prefix + ":zero"` for example. This would greatly reduce the amount of memory the new translations will take in by avoiding allocating plural maps for every string.
Nordfriese
commented
2025-01-17 10:06:14 +01:00
Author
Contributor
Copy link
Thanks! I implemented all your comments.
Thanks! I implemented all your comments.
Gusted
marked this conversation as resolved
modules/translation/i18n/localestore.go
Outdated
@ -81,0 +142,4 @@
case
nil
default
log
Error
"Unrecognized JSON value '%s'"
value
Gusted
commented
2025-01-17 00:15:54 +01:00
Owner
Copy link
Feels like this should instead return an error.
Feels like this should instead return an error.
Gusted
marked this conversation as resolved
modules/translation/translation_test.go
Outdated
@ -51,0 +153,4 @@
for
tc
:=
range
testCases
for
:=
range
tc
values
result
:=
PluralRules
tc
pluralRule
assert
Equal
tc
expect
result
"Testcase for plural rule %d, value %d, expected form %d, got form %d"
tc
pluralRule
tc
expect
result
Gusted
commented
2025-01-17 00:11:50 +01:00
Owner
Copy link
No need to do
expected form %d, got form %d
, testify will already do that.
No need to do `expected form %d, got form %d`, testify will already do that.
Gusted
marked this conversation as resolved
tools/migrate_locales.sh
Outdated
@ -0,0 +1,122 @@
#!/bin/bash
Gusted
commented
2024-12-27 15:39:28 +01:00
Owner
Copy link
Missing copyright headers
Missing copyright headers
Gusted
marked this conversation as resolved
Nordfriese
force-pushed goi18n from
2d24578b07
All checks were successful
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 1m5s
Details
testing / backend-checks (pull_request)
Successful in 2m54s
Details
testing / test-e2e (pull_request)
Successful in 3m1s
Details
testing / test-unit (pull_request)
Successful in 3m8s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 57s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 58s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m0s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 59s
Details
testing / test-mysql (pull_request)
Successful in 16m45s
Details
testing / test-sqlite (pull_request)
Successful in 18m11s
Details
testing / test-pgsql (pull_request)
Successful in 22m13s
Details
testing / security-check (pull_request)
Successful in 1m3s
Details
to
caa296ea5a
All checks were successful
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 53s
Details
testing / backend-checks (pull_request)
Successful in 2m53s
Details
testing / test-e2e (pull_request)
Successful in 3m14s
Details
testing / test-unit (pull_request)
Successful in 5m10s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m58s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m58s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m58s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m0s
Details
testing / test-mysql (pull_request)
Successful in 17m47s
Details
testing / test-sqlite (pull_request)
Successful in 19m59s
Details
testing / test-pgsql (pull_request)
Successful in 24m0s
Details
testing / security-check (pull_request)
Successful in 1m6s
Details
2025-01-17 10:04:21 +01:00
Compare
Gusted
reviewed
2025-01-17 11:07:18 +01:00
Gusted
left a comment
Copy link
Nearly there.
Nearly there.
modules/translation/i18n/localestore.go
Outdated
@ -51,2 +62,4 @@
:=
locale
store
store
langName
langName
idxToMsgMap
make
map
int
string
pluralRule
pluralRule
store
localeMap
langName
newStyleMessages
map
string
string
Gusted
commented
2025-01-17 11:01:32 +01:00
Owner
Copy link
This can be directly initialized on line 62.
This can be directly initialized on line 62.
Gusted
marked this conversation as resolved
modules/translation/i18n/localestore.go
Outdated
@ -81,0 +106,4 @@
// Check whether we are adding a plural form to the parent object, or a new nested JSON object.
if
key
==
"zero"
||
key
==
"one"
||
key
==
"two"
||
key
==
"few"
||
key
==
"many"
locale
newStyleMessages
prefix
"\036"
key
Gusted
commented
2025-01-17 10:47:11 +01:00
Owner
Copy link
Feel free to make
"\036"
or
"$"
a constant.
Feel free to make `"\036"` or `"$"` a constant.
Gusted
marked this conversation as resolved
Nordfriese
force-pushed goi18n from
caa296ea5a
All checks were successful
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / release-notes (pull_request_target)
Has been skipped
Details
testing / frontend-checks (pull_request)
Successful in 53s
Details
testing / backend-checks (pull_request)
Successful in 2m53s
Details
testing / test-e2e (pull_request)
Successful in 3m14s
Details
testing / test-unit (pull_request)
Successful in 5m10s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 1m58s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 1m58s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 1m58s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m0s
Details
testing / test-mysql (pull_request)
Successful in 17m47s
Details
testing / test-sqlite (pull_request)
Successful in 19m59s
Details
testing / test-pgsql (pull_request)
Successful in 24m0s
Details
testing / security-check (pull_request)
Successful in 1m6s
Details
to
a2787bb09e
All checks were successful
testing / frontend-checks (pull_request)
Successful in 1m12s
Details
testing / backend-checks (pull_request)
Successful in 3m35s
Details
testing / test-e2e (pull_request)
Successful in 4m41s
Details
testing / test-unit (pull_request)
Successful in 7m6s
Details
testing / test-remote-cacher (valkey) (pull_request)
Successful in 2m21s
Details
testing / test-remote-cacher (redis) (pull_request)
Successful in 2m24s
Details
testing / test-remote-cacher (garnet) (pull_request)
Successful in 2m23s
Details
testing / test-remote-cacher (redict) (pull_request)
Successful in 2m24s
Details
testing / test-mysql (pull_request)
Successful in 20m42s
Details
testing / test-sqlite (pull_request)
Successful in 22m39s
Details
testing / test-pgsql (pull_request)
Successful in 26m10s
Details
testing / security-check (pull_request)
Successful in 1m10s
Details
milestone / set (pull_request_target)
Successful in 4s
Details
issue-labels / backporting (pull_request_target)
Has been skipped
Details
issue-labels / cascade (pull_request_target)
Has been skipped
Details
requirements / merge-conditions (pull_request)
Successful in 2s
Details
issue-labels / release-notes (pull_request_target)
Successful in 47s
Details
2025-01-17 11:21:48 +01:00
Compare
Gusted
approved these changes
2025-01-17 21:27:44 +01:00
Gusted
left a comment
Copy link
LGTM to be merged and played with now. Thanks!
LGTM to be merged and played with now. Thanks!
0ko
approved these changes
2025-01-18 06:50:31 +01:00
0ko
left a comment
Copy link
Moved strings are not in conflict with
#6565
, should be good to merge.
Moved strings are not in conflict with https://codeberg.org/forgejo/forgejo/pulls/6565, should be good to merge.
0ko
referenced this pull request from a commit
2025-01-18 06:51:21 +01:00
Initial support for localization and pluralization with go-i18n-JSON-v2 format (#6203)
0ko
merged commit
4c746ec653
into
forgejo
2025-01-18 06:51:24 +01:00
forgejo-release-notes-assistant
added this to the
Forgejo v11.0.0
milestone
2025-01-18 06:51:36 +01:00
0ko
referenced this pull request
2025-01-18 08:02:14 +01:00
fix(i18n): flatten next locales
#6607
Nordfriese
deleted branch
goi18n
2025-01-18 10:20:53 +01:00
Gusted
referenced this pull request
2025-01-24 07:02:08 +01:00
WIP: fix(i18n): make strings on pulse page better translatable, fix #2555
#4721
Gusted
referenced this pull request
2025-01-28 15:07:09 +01:00
fix(i18n): use translate key as fallback
#6702
fnetX
referenced this pull request from a commit
2025-01-29 01:12:53 +01:00
fix(i18n): use translate key as fallback
0ko
referenced this pull request from forgejo/website
2025-01-30 20:19:53 +01:00
Monthly Update for January 2025
#523
Gusted
referenced this pull request
2025-02-04 19:26:09 +01:00
feat: switching localization to a better format
#5548
Gusted
referenced this pull request
2025-02-05 19:50:42 +01:00
chore: teach lint-locale about locale_next
#6800
Gusted
referenced this pull request from a commit
2025-02-06 12:16:25 +01:00
chore: teach lint-locale about locale_next (#6800)
lenkaseg
referenced this pull request from a commit
2025-02-18 16:13:18 +01:00
fix(i18n): use translate key as fallback
lenkaseg
referenced this pull request from a commit
2025-02-18 16:13:19 +01:00
chore: teach lint-locale about locale_next (#6800)
forgejo-actions
referenced this pull request from forgejo/website
2025-02-21 18:03:28 +01:00
Dead links report
#529
0ko
referenced this pull request
2025-03-08 15:07:21 +01:00
fix(i18n): make HasKey aware of newStyleMessages
#7166
Gusted
referenced this pull request from a commit
2025-03-08 15:52:43 +01:00
fix(i18n): make HasKey aware of newStyleMessages (#7166)
forgejo-actions
referenced this pull request from forgejo/website
2025-03-10 18:03:08 +01:00
Dead links report
#529
0ko
added the
worth a release-note
label
2025-04-06 11:04:22 +02:00
forgejo-release-notes-assistant
commented
2025-04-06 11:05:17 +02:00
Member
Copy link
Where does that come from?
The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `release-notes/6203.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference.
This message and the release notes originate from a call to the
release-notes-assistant
@@ -35,2 +35,10 @@
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/
+
+## Release notes
+
+- Features
+ - [PR](https://codeberg.org/forgejo/forgejo/pulls/6203): Initial support for localization and pluralization with go-i18n-JSON-v2 format
+
Release notes
Features
PR
: Initial support for localization and pluralization with go-i18n-JSON-v2 formatWhere does that come from?
The following is a preview of the release notes for this pull request, as they will appear in the upcoming release. They are derived from the content of the `release-notes/6203.md` file, if it exists, or the title of the pull request. They were also added at the bottom of the description of this pull request for easier reference.
This message and the release notes originate from a call to the [release-notes-assistant](https://code.forgejo.org/forgejo/release-notes-assistant).
```diff
@@ -35,2 +35,10 @@
- [ ] I want the title to show in the release notes with a link to this pull request.
- [ ] I want the content of the `release-notes/
+
+## Release notes
+
+- Features
+ - [PR](https://codeberg.org/forgejo/forgejo/pulls/6203): Initial support for localization and pluralization with go-i18n-JSON-v2 format
+
```
## Release notes
- Features
- [PR](https://codeberg.org/forgejo/forgejo/pulls/6203): Initial support for localization and pluralization with go-i18n-JSON-v2 format
0ko
referenced this pull request from forgejo/website
2025-04-14 20:57:04 +02:00
Blog post for v11.0.0
#572
0ko
referenced this pull request
2025-04-21 16:57:52 +02:00
fix(i18n): prevent incorrect logging on strings missing in JSON locales
#7594
0ko
referenced this pull request from a commit
2025-04-22 05:49:49 +02:00
fix(i18n): prevent incorrect logging on strings missing in JSON locales (#7594)
forgejo-backport-action
referenced this pull request
2025-04-22 05:50:28 +02:00
[v11.0/forgejo] fix(i18n): prevent incorrect logging on strings missing in JSON locales
#7599
forgejo-backport-action
referenced this pull request from a commit
2025-04-22 05:50:32 +02:00
fix(i18n): prevent incorrect logging on strings missing in JSON locales (#7594)
Gusted
referenced this pull request from a commit
2025-04-23 15:44:23 +02:00
[v11.0/forgejo] fix(i18n): prevent incorrect logging on strings missing in JSON locales (#7599)
davrot
referenced this pull request from a commit
2025-06-02 14:13:47 +02:00
fix(i18n): use translate key as fallback
davrot
referenced this pull request from a commit
2025-06-02 14:13:48 +02:00
chore: teach lint-locale about locale_next (#6800)
davrot
referenced this pull request from a commit
2025-06-02 14:13:49 +02:00
fix(i18n): make HasKey aware of newStyleMessages (#7166)
davrot
referenced this pull request from a commit
2025-06-02 14:13:52 +02:00
fix(i18n): prevent incorrect logging on strings missing in JSON locales (#7594)
jasewolf
referenced this pull request from a commit
2025-07-15 09:50:02 +02:00
v11.0.3 - initial squash
jasewolf
referenced this pull request from a commit
2025-07-16 05:53:11 +02:00
v11.0.3
dmowitz
referenced this pull request from a commit
2025-08-08 01:41:40 +02:00
fix(i18n): prevent incorrect logging on strings missing in JSON locales (#7594)
forgejo-actions
referenced this pull request from forgejo/website
2025-11-27 18:11:36 +01:00
Dead links report
#529
forgejo-actions
referenced this pull request from forgejo/website
2025-12-08 18:03:53 +01:00
Dead links report
#529
alberic89
referenced this pull request from a commit
2026-02-23 18:42:20 +01:00
fix(i18n): make HasKey aware of newStyleMessages (#7166)
alberic89
referenced this pull request from a commit
2026-02-23 18:42:27 +01:00
fix(i18n): prevent incorrect logging on strings missing in JSON locales (#7594)
0ko
referenced this pull request
2026-04-18 16:44:53 +02:00
fix(i18n): don't log harmless missing translations as errors
#12183
Beowulf
referenced this pull request from a commit
2026-04-18 23:18:12 +02:00
fix(i18n): don't log harmless missing translations as errors (#12183)
forgejo-backport-action
referenced this pull request from a commit
2026-04-18 23:19:17 +02:00
fix(i18n): don't log harmless missing translations as errors (#12183)
forgejo-backport-action
referenced this pull request
2026-04-18 23:19:18 +02:00
[v15.0/forgejo] fix(i18n): don't log harmless missing translations as errors
#12185
Gusted
referenced this pull request from a commit
2026-04-19 01:46:44 +02:00
[v15.0/forgejo] fix(i18n): don't log harmless missing translations as errors (#12185)
to join this conversation.
Reviewers
No reviewers
crystal
fnetX
caesar
Gusted
0ko
Labels
Clear labels
arch
riscv64
Archived
backport/v1.19
Scheduled for backport to Forgejo v1.19
Archived
backport/v1.20
Scheduled for backport to Forgejo v1.20
Archived
backport/v1.21/forgejo
Scheduled for backport to Forgejo v1.21
Archived
backport/v10.0/forgejo
Automated backport to v10.0
Archived
backport/v11.0/forgejo
Automated backport to v11.0
backport/v12.0/forgejo
Automated backport to v12.0
Archived
backport/v13.0/forgejo
Automated backport to v13.0
Archived
backport/v14.0/forgejo
Automated backport to v14.0
backport/v15.0/forgejo
Automated backport to v15.0
backport/v7.0/forgejo
Scheduled for backport to Forgejo v7.0
Archived
backport/v8.0/forgejo
Scheduled for backport to Forgejo v8.0
Archived
backport/v9.0/forgejo
Scheduled for backport to Forgejo v9.0
Archived
breaking
The release containing this change is not backward compatible
bug
Something is not working
Archived
bug
confirmed
it can be reproduced
bug
duplicate
bug has already been reported in the Forgejo tracker
bug
needs-more-info
the information provided does not contain enough details
bug
new-report
bug has just been reported and need triage (default label on issue creation)
bug
reported-upstream
bug cannot be fixed within Forgejo easily, it has been reported upstream
code/actions
Forgejo Actions feature
code/api
API
code/auth
Forgejo Authentication
code/auth/faidp
Forgejo as Identity Provider (in OAuth/OIDC flow)
code/auth/farp
Forgejo as Relying Party / Client (in OAuth/OIDC flow)
code/email
Everything related to email in Forgejo
code/federation
Federation
code/git
Related to the Git backend in Forgejo
code/migrations
Migration between Git forges (i.e. for GitHub, GitLab, Gitea, Forgejo, etc.). NOT for database migrations.
code/packages
Forgejo package and container registry
code/wiki
database
MySQL
database
PostgreSQL
database
SQLite
dependency-upgrade
dependency
Chi
Archived
dependency
Chroma
Archived
dependency
F3
dependency
ForgeFed
dependency
garage
dependency
Gitea
Archived
dependency
Golang
Discussion
duplicate
This issue or pull request already exists
enhancement/feature
New feature
forgejo/accessibility
Accessibility (a11y)
forgejo/branding
Branding (logo, name, tagline etc.)
forgejo/ci
Forgejo Actions CI configuration
forgejo/commit-graph
The commit graph feature and page.
forgejo/documentation
forgejo/furnace cleanup
Keeping Forgejo in sync with its dependencies and contributing back to them
Archived
forgejo/i18n
t9n/translation, l10n/localization, and i18n/internationalization of Forgejo
forgejo/interop
Interoperability with other services: Webhooks, bridges, integrations
forgejo/moderation
Moderation
forgejo/privacy
Privacy first
forgejo/release
Release management
forgejo/scaling
Performance and scaling
forgejo/security
Security (please disclose responsibly)
forgejo/ui
User interface
Gain
High
User research provides indicators that this would be good to have, interested contributors are encouraged to pick this.
Gain
Nice to have
This is likely worth having, but the assumption is not backed by user research data (it might benefit a small amount of users only.) Unlikely to receive much attention, but feel free to pick.
Gain
Undefined
Not enough information to assess the request's benefits. This issue may be closed if no gain is established: You can help by giving us more input.
Gain
Very High
User research indicates that this is an important improvement for Forgejo users. Contributions very welcome!
good first issue
Optimal for first-timers! Make sure to look for further explanations and ask for help if needed. If you want, you can consider the person who added this label as a point of contact.
i18n/backport-stable
This PR needs to be backported to stable branch of Forgejo safely and manually, using a migration script.
impact
large
Large impact: Potential data loss, many users affected, major degradation in UX.
impact
medium
Medium impact: Several users affected, degradation in UX, workarounds might be available but inconvenient.
impact
small
Small impact: No data loss, workarounds might be available, affects few users.
impact
unknown
Report was not yet triaged to assess impact.
Incompatible license
This pull request contains changes that are not (yet) compatible with the current Forgejo license
issue
closed
The issue was resolved in the repository of the dependency
issue
do-not-exist-yet
An issue should be created in the respository of the dependency
issue
open
An open issue exists in the upstream repository of the dependency
manual test
Pull requests that have been merged with a manual test
Archived
Manually tested during feature freeze
The manual test instructions were followed
OS
FreeBSD
Specific to the FreeBSD Operating System
OS
Linux
Specific to (GNU/)Linux Operating Systems
OS
macOS
Specific to the MacOS Operating System
OS
Windows
Specific to the Windows Operating System
problem
A user report about a problem. Needs to be triaged to find potential solutions.
QA
regression
found in the version of the milestone and not before
release blocker
Issues that must be fixed before the release can be published
Release Cycle
Feature Freeze
Only bug fixes with automated tests (except for CSS/JavaScript)
release-blocker
v7.0
Issues that must be fixed before Forgejo v7.0 can be released 17 April 2024
Archived
release-blocker
v7.0.1
Issues that must be fixed before Forgejo v7.0.1 can be released
Archived
release-blocker
v7.0.2
Issues that must be fixed before Forgejo v7.0.2 can be released
Archived
release-blocker
v7.0.3
Issues that must be fixed before Forgejo v7.0.3 can be released
Archived
release-blocker
v7.0.4
Issues that must be fixed before Forgejo v7.0.4 can be released
Archived
release-blocker
v8.0.0
Issues that must be fixed before Forgejo v8.0.0 can be released
Archived
release-blocker/v9.0.0
Issues that must be fixed before Forgejo v9.0.0 can be released
Archived
run-all-playwright-tests
Add this label to a PR to run all playwright tests manually.
run-end-to-end-tests
Trigger additional tests on the PR when it is ready to be merged
test
manual
manual testing has been documented
test
needed
test should be added
test
needs-help
help needed to add a test
test
not-needed
no additional test is needed
test
present
test has been added
untested
Pull requests that have been merged with no test and submitted as is to the dependency where they belong
Archived
User research - time-tracker
Time tracking feature for issues and the JS stopwatch.
valuable code
This PR was closed because the implementation is incomplete
worth a release-note
Add this PR to the release notes
User research - Accessibility
Requires input about accessibility features, likely involves user testing.
User research - Blocked
Do not pick as-is! We are happy if you can help, but please coordinate with ongoing redesign in this area.
User research - Community
Community features, such as discovering other people's work or otherwise feeling welcome on a Forgejo instance.
User research - Config (instance)
Instance-wide configuration, authentication and other admin-only needs.
User research - Errors
How to deal with errors in the application and write helpful error messages.
User research - Filters
How filter and search is being worked with.
User research - Future backlog
The issue might be inspiring for future design work.
User research - Git workflow
AGit, fork-based and new Git workflow, PR creation etc
User research - Labels
Active research about Labels
User research - Moderation
Moderation Featuers for Admins are undergoing active User Research
User research - Needs input
Use this label to let the User Research team know their input is requested.
User research - Notifications/Dashboard
Research on how users should know what to do next.
User research - Rendering
Text rendering, markup languages etc
User research - Repo creation
Active research about the New Repo dialog.
User research - Repo units
The repo sections, disabling them and the "Add more" button.
User research - Security
User research - Settings (in-app)
How to structure in-app settings in the future?
No labels
arch
riscv64
backport/v1.19
backport/v1.20
backport/v1.21/forgejo
backport/v10.0/forgejo
backport/v11.0/forgejo
backport/v12.0/forgejo
backport/v13.0/forgejo
backport/v14.0/forgejo
backport/v15.0/forgejo
backport/v7.0/forgejo
backport/v8.0/forgejo
backport/v9.0/forgejo
breaking
bug
bug
confirmed
bug
duplicate
bug
needs-more-info
bug
new-report
bug
reported-upstream
code/actions
code/api
code/auth
code/auth/faidp
code/auth/farp
code/email
code/federation
code/git
code/migrations
code/packages
code/wiki
database
MySQL
database
PostgreSQL
database
SQLite
dependency-upgrade
dependency
Chi
dependency
Chroma
dependency
F3
dependency
ForgeFed
dependency
garage
dependency
Gitea
dependency
Golang
Discussion
duplicate
enhancement/feature
forgejo/accessibility
forgejo/branding
forgejo/ci
forgejo/commit-graph
forgejo/documentation
forgejo/furnace cleanup
forgejo/i18n
forgejo/interop
forgejo/moderation
forgejo/privacy
forgejo/release
forgejo/scaling
forgejo/security
forgejo/ui
Gain
High
Gain
Nice to have
Gain
Undefined
Gain
Very High
good first issue
i18n/backport-stable
impact
large
impact
medium
impact
small
impact
unknown
Incompatible license
issue
closed
issue
do-not-exist-yet
issue
open
manual test
Manually tested during feature freeze
OS
FreeBSD
OS
Linux
OS
macOS
OS
Windows
problem
QA
regression
release blocker
Release Cycle
Feature Freeze
release-blocker
v7.0
release-blocker
v7.0.1
release-blocker
v7.0.2
release-blocker
v7.0.3
release-blocker
v7.0.4
release-blocker
v8.0.0
release-blocker/v9.0.0
run-all-playwright-tests
run-end-to-end-tests
test
manual
test
needed
test
needs-help
test
not-needed
test
present
untested
User research - time-tracker
valuable code
worth a release-note
User research - Accessibility
User research - Blocked
User research - Community
User research - Config (instance)
User research - Errors
User research - Filters
User research - Future backlog
User research - Git workflow
User research - Labels
User research - Moderation
User research - Needs input
User research - Notifications/Dashboard
User research - Rendering
User research - Repo creation
User research - Repo units
User research - Security
User research - Settings (in-app)
Milestone
Clear milestone
No items
No milestone
Forgejo v11.0.0
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
forgejo/forgejo!6203
Reference in a new issue
No description provided.
Delete branch "Nordfriese/forgejo:goi18n"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?