Skip to content

Show Lexbox instead of Language Forge/Depot in send/receive UI#389

Open
hahn-kev wants to merge 3 commits into
masterfrom
lexbox-ui-branding
Open

Show Lexbox instead of Language Forge/Depot in send/receive UI#389
hahn-kev wants to merge 3 commits into
masterfrom
lexbox-ui-branding

Conversation

@hahn-kev

@hahn-kev hahn-kev commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Getting lots of confusion from people seeing Language Forge in the UI, especially now that Language forge is in maintenance mode.

User-facing labels, aliases, and error messages now say Lexbox while server URLs and internal settings keys remain on languageforge.org.

image

one thing I noticed is that the FLEx help still references language depot and language forge. Not sure how we update those, I thought they already were but maybe they didn't make it into the most recent release?

I also fixed launching the sample app and Chorus directly, previously they would crash because localization manager was not setup.


This change is Reviewable

User-facing labels, aliases, and error messages now say Lexbox while server URLs and internal settings keys remain on languageforge.org.

Co-authored-by: Cursor <cursoragent@cursor.com>
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

Test Results

       8 files  ±0     333 suites  ±0   2h 23m 9s ⏱️ - 4m 25s
   993 tests +1     937 ✔️ +1    56 💤 ±0  0 ±0 
3 160 runs  +3  3 037 ✔️ +3  123 💤 ±0  0 ±0 

Results for commit 762ea68. ± Comparison against base commit 7313dd6.

♻️ This comment has been updated with latest results.

Show "Log in to Lexbox" without the hostname, initialize L10NSharp for Chorus.exe and SampleApp, and mark server settings dialog tests STA.

Co-authored-by: Cursor <cursoragent@cursor.com>
@hahn-kev
hahn-kev marked this pull request as ready for review July 13, 2026 09:58

@imnasnainaec imnasnainaec 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.

@imnasnainaec reviewed 3 files and made 4 comments.
Reviewable status: 3 of 13 files reviewed, 4 unresolved discussions (waiting on hahn-kev).


src/Chorus/Program.cs line 77 at r1 (raw file):

			if (Directory.Exists(Path.Combine(installedTranslations, "Chorus")))
			{
				var userTranslations = Path.Combine(

Devin nit:

src/Chorus/Program.cs:R77-81

Localization setup creates a nested 'Chorus/Chorus' directory for user translations

In Program.cs:77-81, userTranslations is set to %APPDATA%/SIL/Chorus, then ChorusSystem.SetUpLocalization appends "Chorus" internally (src/Chorus/ChorusSystem.cs:119), resulting in user-modified translation files being stored at %APPDATA%/SIL/Chorus/Chorus. The SampleApp avoids this by using "SIL", "ChorusSampleApp" as the base. The double-Chorus nesting is functional but slightly awkward. The SetUpLocalization parameter is documented as a path where "a folder named Chorus\localizations will be created" (src/Chorus/ChorusSystem.cs:112-113), so the intent is for the caller to pass the app's settings root, not a Chorus-specific path.


src/Chorus/UI/Misc/ServerSettingsControl.Designer.cs line 299 at r1 (raw file):

			this._serverLabel.Size = new System.Drawing.Size(122, 13);
			this._serverLabel.TabIndex = 18;
			this._serverLabel.Text = "to Lexbox";

Devin nit:

src/Chorus/UI/Misc/ServerSettingsControl.Designer.cs:R299

Login label no longer shows which server (public vs private) the user will connect to

The old code dynamically formatted _serverLabel.Text with the actual server hostname (e.g. public.languageforge.org or private.languageforge.org). [...] Users connecting to a private server will see the same label as public server users, losing a visual cue about which server they're targeting.


src/Chorus/UI/Settings/SettingsView.resx line 159 at r1 (raw file):

online = https://JoeSmith:mypassword@hg-public.languageforge.org/tpi

For a free Lexbox internet repository, visit https://public.languageforge.org</value>

Since https://public.languageforge.org redirects to https://languagedepot.org/login, shouldn't we update the url here to avoid the redirect reliance?


src/LibChorus/Model/ServerSettingsModel.cs line 368 at r1 (raw file):

				}

				return $"Lexbox [{Bandwidth}]";

Devin potential bug:

src/LibChorus/Model/ServerSettingsModel.cs:R368

Renaming the repository alias breaks automatic sync for existing projects

The repository alias written to the config file's paths section is changed from the old name to the new name ($"Lexbox [{Bandwidth}]" at src/LibChorus/Model/ServerSettingsModel.cs:368), but the matching entry in the default-sync section is never updated, so the two sections fall out of sync.

Impact: Existing projects that previously auto-synced will silently stop being included in default sync operations after settings are saved.

Alias name mismatch between [paths] and [ChorusDefaultRepositories] in hgrc

When SaveSettings() is called (src/LibChorus/Model/ServerSettingsModel.cs:263-276), it invokes SetTheOnlyAddressOfThisType(CreateRepositoryAddress(AliasName)). The SetTheOnlyAddressOfThisType method (src/LibChorus/VcsDrivers/Mercurial/HgRepository.cs:1494-1503) removes the old HttpRepositoryPath entry from [paths] by type and adds a new one with the new alias name "Lexbox [High bandwidth]". However, the [ChorusDefaultRepositories] section still contains the old key "languageForge.org [High bandwidth]". Since GetDefaultSyncAliases() (src/LibChorus/VcsDrivers/Mercurial/HgRepository.cs:1535-1541) returns keys from [ChorusDefaultRepositories] and these are matched by name against entries in [paths], the old alias no longer resolves to any path.

This is triggered whenever SaveSettings() runs for an existing repository — either through the server settings dialog or via RemoveCredentialsFromIniIfNecessary() (src/LibChorus/VcsDrivers/Mercurial/HgRepository.cs:1437-1448).

- Migrate the [ChorusDefaultRepositories] entry when a repository alias is
  renamed so existing projects keep auto-syncing (regression test added).
- Avoid a redundant nested Chorus\Chorus user-translations directory when
  standalone Chorus.exe sets up localization.
- Point the settings help text at https://lexbox.org instead of relying on a
  redirect from public.languageforge.org.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@hahn-kev

Copy link
Copy Markdown
Contributor Author

Thanks for the feedback. I've fixed most of it. There's no private vs public anymore, so we're removing that from the UI.

@hahn-kev
hahn-kev force-pushed the lexbox-ui-branding branch from 77ad3b8 to 762ea68 Compare July 23, 2026 08:27

@imnasnainaec imnasnainaec 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.

@imnasnainaec reviewed 10 files and all commit messages, made 1 comment, and resolved 4 discussions.
Reviewable status: 13 of 14 files reviewed, all discussions resolved.


src/Chorus/Program.cs line 72 at r3 (raw file):

		private static void SetUpLocalization()
		{
			// Standalone Chorus.exe has no host app to initialize L10NSharp; use English defaults unless XLF files are deployed.

⛏️ This comment seems like material for adding XML docs to the method.

@imnasnainaec imnasnainaec changed the title Show Lexbox instead of Language Forge/Depot in send/receive UI. Show Lexbox instead of Language Forge/Depot in send/receive UI Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants