Skip to content

Commit fbbd9b9

Browse files
committed
1.6.3
1 parent 29398c7 commit fbbd9b9

64 files changed

Lines changed: 8462 additions & 561 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# Changelog
2-
## [1.6.2] - 2025-07-11
2+
3+
## [1.6.3] - 17.08.2025
4+
### Added
5+
- Automatic sorting, grouping of keys and translations in the editor.
6+
- Added functionality for creating your own localization components.
7+
- Added a new localization component for `Sprite Renderer`.
8+
- New function buttons: `Set translation` and `Replace to *component*` for text components.
9+
- Example of using an asset.
10+
- Ability to change the default language via the language selection drop-down list + the ability to disable this functionality.
11+
- Automatic creation of a new language on first launch.
12+
- Ability to disable font replacement when changing the language.
13+
14+
### Fixed
15+
- Reworked logic for sprite localization.
16+
17+
### Changed
18+
- Reworked logic for searching for a key in the localization component.
19+
20+
## [1.6.2] - 11.07.2025
321
### Fixed
422
- Fixed a bug with Layout. After exiting maximize mode for any window, the layout was reset to default results.
523

CHANGELOG_RU.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# Журнал изменений
22

3+
## [1.6.3] - 17.08.2025
4+
### Добавлено
5+
- Автоматическая сортировка группировка ключей и переводов в редакторе.
6+
- Добавлен функционал для создания собственных компонентов локализации.
7+
- Добавлен новый компонент локализации для `Sprite Renderer`.
8+
- Новые функциональные кнопки: `Set translation` и `Replace to *component*` для компонентов текста.
9+
- Пример использования ассета.
10+
- Возможность смены языка по умолчанию через выпадающий список выбора языка + возможность выключить этот функционал.
11+
- Автоматическое создание нового языка при первом запуске.
12+
- Возможность выключения замены шрифта во время смены языка.
13+
14+
### Исправлено
15+
- Переработана логика работы локализации спрайтов.
16+
17+
### Изменено
18+
- Переработана логика поиска ключа в компоненте локализации.
19+
320
## [1.6.2] - 11.07.2025
421
### Исправлено
522
- Исправлена ошибка с Layout. После выхода из режима maximize для любого окна, Layout сбрасывался до значений по умолчанию.

Editor/Components/Abstract.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using System;
2+
using UnityEditor;
3+
using UnityEngine;
4+
using Object = UnityEngine.Object;
5+
6+
namespace SimplyLocalize.Editor
7+
{
8+
[CanEditMultipleObjects]
9+
public class LocalizationObjectEditor<TLocalizationComponent, TTargetComponent, TLocalizationTarget> : UnityEditor.Editor
10+
where TLocalizationComponent : LocalizationObject<TLocalizationTarget>
11+
where TTargetComponent : Component
12+
where TLocalizationTarget : Object
13+
{
14+
public override void OnInspectorGUI()
15+
{
16+
serializedObject.Update();
17+
18+
var overrideLocalizationTargetProp = serializedObject.FindProperty("_overrideLocalizationTarget");
19+
var localizationKeyProp = serializedObject.FindProperty("_keyObject");
20+
var localizationTargetProp = serializedObject.FindProperty("_localizationTarget");
21+
22+
if (overrideLocalizationTargetProp == null || localizationTargetProp == null)
23+
{
24+
var implemented = serializedObject.targetObject is ICanOverrideLocalizationTarget<TTargetComponent>;
25+
if (implemented == false)
26+
{
27+
Debug.LogError("If you want to use this editor, please implement ICanOverrideLocalizationTarget interface in your component.", serializedObject.targetObject);
28+
return;
29+
}
30+
Debug.LogError("You implemented ICanOverrideLocalizationTarget interface, but not created backing fields. \n[_overrideLocalizationTarget] and [_localizationTarget]", serializedObject.targetObject);
31+
32+
return;
33+
}
34+
35+
EditorGUILayout.PropertyField(localizationKeyProp);
36+
EditorGUILayout.PropertyField(overrideLocalizationTargetProp);
37+
38+
var hasImage = localizationTargetProp.propertyType != SerializedPropertyType.ObjectReference || localizationTargetProp.objectReferenceValue != null;
39+
40+
if (overrideLocalizationTargetProp.boolValue)
41+
{
42+
var targetObject = (TLocalizationComponent)serializedObject.targetObject;
43+
44+
if (targetObject != null)
45+
{
46+
localizationTargetProp.objectReferenceValue ??= targetObject.GetComponent<TTargetComponent>();
47+
}
48+
49+
EditorGUILayout.PropertyField(localizationTargetProp);
50+
}
51+
else
52+
{
53+
var targetObject = (TLocalizationComponent)serializedObject.targetObject;
54+
55+
if (targetObject != null)
56+
{
57+
localizationTargetProp.objectReferenceValue = targetObject.GetComponent<TTargetComponent>();
58+
}
59+
60+
if (hasImage)
61+
{
62+
EditorGUI.BeginDisabledGroup(true);
63+
EditorGUILayout.PropertyField(localizationTargetProp);
64+
EditorGUI.EndDisabledGroup();
65+
}
66+
}
67+
68+
if (!hasImage)
69+
{
70+
EditorGUILayout.HelpBox("You must assign an Image component.", MessageType.Warning);
71+
}
72+
73+
serializedObject.ApplyModifiedProperties();
74+
}
75+
}
76+
}

Editor/Components/Abstract/LocalizationObjectEditor.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,9 @@
11
using UnityEditor;
2+
using UnityEngine;
23
using UnityEngine.UI;
34

45
namespace SimplyLocalize.Editor
56
{
67
[CustomEditor(typeof(LocalizationImage), true)]
7-
[CanEditMultipleObjects]
8-
public class LocalizationImageEditor : UnityEditor.Editor
9-
{
10-
public override void OnInspectorGUI()
11-
{
12-
serializedObject.Update();
13-
14-
var overrideImageProp = serializedObject.FindProperty("_overrideImage");
15-
var localizationKeyProp = serializedObject.FindProperty("_keyObject");
16-
var imageProp = serializedObject.FindProperty("_image");
17-
18-
EditorGUILayout.PropertyField(localizationKeyProp);
19-
EditorGUILayout.PropertyField(overrideImageProp);
20-
21-
var hasImage = imageProp.propertyType != SerializedPropertyType.ObjectReference || imageProp.objectReferenceValue != null;
22-
23-
if (overrideImageProp.boolValue)
24-
{
25-
var targetObject = (LocalizationImage)serializedObject.targetObject;
26-
27-
if (targetObject != null)
28-
{
29-
imageProp.objectReferenceValue ??= targetObject.GetComponent<Image>();
30-
}
31-
32-
EditorGUILayout.PropertyField(imageProp);
33-
}
34-
else
35-
{
36-
var targetObject = (LocalizationImage)serializedObject.targetObject;
37-
38-
if (targetObject != null)
39-
{
40-
imageProp.objectReferenceValue = targetObject.GetComponent<Image>();
41-
}
42-
43-
if (hasImage)
44-
{
45-
EditorGUI.BeginDisabledGroup(true);
46-
EditorGUILayout.PropertyField(imageProp);
47-
EditorGUI.EndDisabledGroup();
48-
}
49-
}
50-
51-
if (!hasImage)
52-
{
53-
EditorGUILayout.HelpBox("You must assign an Image component.", MessageType.Warning);
54-
}
55-
56-
serializedObject.ApplyModifiedProperties();
57-
}
58-
}
8+
public class LocalizationImageEditor : LocalizationObjectEditor<LocalizationImage, Image, Sprite> { }
599
}

Editor/Components/LocalizationImageEditor.cs.meta

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using UnityEditor;
2+
using UnityEngine;
3+
4+
namespace SimplyLocalize.Editor
5+
{
6+
[CustomEditor(typeof(LocalizationSpriteRenderer), true)]
7+
public class LocalizationSpriteRendererEditor : LocalizationObjectEditor<LocalizationSpriteRenderer, SpriteRenderer, Sprite> { }
8+
}

Editor/Components/LocalizationSpriteRendererEditor.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/Components/TextComponents/FormattableLocalizationTextEditor.cs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using UnityEditor;
1+
using System;
2+
using UnityEditor;
23

34
namespace SimplyLocalize.Editor
45
{
@@ -13,7 +14,48 @@ public override void OnInspectorGUI()
1314
var defaultValuesProp = serializedObject.FindProperty("_defaultValues");
1415
EditorGUILayout.PropertyField(defaultValuesProp);
1516

17+
DrawTranslateButton(false);
1618
serializedObject.ApplyModifiedProperties();
19+
20+
DrawReplaceToButton("Replace to Localization Text", ReplaceFormattableToBase, ReplaceFormattableToBaseValidate);
21+
}
22+
23+
private void ReplaceFormattableToBase()
24+
{
25+
var formattable = (FormattableLocalizationText)serializedObject.targetObject;
26+
27+
if (formattable == null)
28+
throw new ArgumentNullException("Target object is not " + nameof(FormattableLocalizationText) + ".");
29+
30+
var gameObject = formattable.gameObject;
31+
32+
var soFormattable = new SerializedObject(formattable);
33+
soFormattable.Update();
34+
var localizationKeyFormattable = soFormattable.FindProperty("_localizationKey");
35+
36+
var valueFormattable = localizationKeyFormattable.FindPropertyRelative("_key");
37+
38+
Undo.RegisterCompleteObjectUndo(gameObject, $"Replace {formattable.GetType().Name} with {nameof(LocalizationText)}");
39+
Undo.DestroyObjectImmediate(formattable);
40+
41+
var localizationText = Undo.AddComponent(gameObject, typeof(LocalizationText));
42+
43+
var soLocalizationText = new SerializedObject(localizationText);
44+
var localizationKeyText = soLocalizationText.FindProperty("_localizationKey");
45+
46+
var valueText = localizationKeyText.FindPropertyRelative("_key");
47+
48+
valueText.stringValue = valueFormattable.stringValue;
49+
50+
soLocalizationText.ApplyModifiedProperties();
51+
Selection.activeObject = localizationText;
52+
}
53+
54+
private bool ReplaceFormattableToBaseValidate()
55+
{
56+
return serializedObject.targetObject is FormattableLocalizationText formattable &&
57+
formattable != null &&
58+
formattable.GetType() == typeof(FormattableLocalizationText);
1759
}
1860
}
1961
}

0 commit comments

Comments
 (0)