Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Intro
This PR is a quick hotfix for handling
LocText
translation in case where we have to modify the underlyingText
by calling thepublic var text: Text
property.In the future, we can see if we can remove that property from the lib, but in that case, we will have to introduce support for setting some properties on underlying
Text
.Issue
In case we use
public var text: Text
from theLocText
directly (use-case example later), we will get the error:This will result in a not translated
LocText
element (only the default language will be set; a language change will not take effect).Fix
To fix this behavior, I replaced
@Environment(\.language)
base handling with completion base one. I can even removeLanguageModifier
if we don't need it (not sure if someone is using it?), and we can call.onReceive
directly onLocText
text
inside thebody
.That way, when a language change occurs and a notification is fired,
@State
will be updated, and we will have a correct translation on the nextbody
render.Use Case
In case when we want to set
kerning
andlineSpacing
on font, we have to accessText
directly as those modifiers are not available onContent
(e.g., creating theViewModifier
) orView
(i.e., onLocText
). In that case, we can use the existingpublic var text: Text
property on which we can then applykerning
andlineSpacing
. Example: