ArticyXImporter
ArticyXImporter for Unreal Engine
Loading...
Searching...
No Matches
ArticyLocalizerSystem.h
1//
2// Copyright (c) 2023 articy Software GmbH & Co. KG. All rights reserved.
3//
4
5#pragma once
6
7#include "CoreMinimal.h"
8#include "ArticyType.h"
9#include "ArticyTextExtension.h"
10#include "Internationalization/StringTableRegistry.h"
11#include "UObject/UObjectIterator.h"
12#include "UObject/Package.h"
13#include "Internationalization/StringTableCore.h"
14#include "ArticyLocalizationSubsystem.h"
15#include "ArticyLocalizerSystem.generated.h"
16
17UCLASS(BlueprintType)
18class ARTICYRUNTIME_API UArticyLocalizerSystem : public UObject
19{
20 GENERATED_BODY()
21
22public:
23 static UArticyLocalizerSystem* Get()
24 {
25 if (UArticyLocalizationSubsystem* Subsys = UArticyLocalizationSubsystem::Get())
26 {
27 return Subsys->GetLocalizer();
28 }
29 return nullptr;
30 }
31
32 virtual void Reload() {};
33
34 inline FText ResolveText(UObject* Outer, const FText* SourceText)
35 {
36 return UArticyTextExtension::Get()->Resolve(Outer, SourceText);
37 }
38
39 inline FText LocalizeString(UObject* Outer, const FText& Key, bool ResolveTextExtension = true, const FText* BackupText = nullptr)
40 {
41 if (!bDataLoaded)
42 {
43 // Either return BackupText or Key.
44 if (BackupText) return *BackupText;
45 return Key;
46 }
47
48 const FText MissingEntry = FText::FromString("<MISSING STRING TABLE ENTRY>");
49
50 // Default to key
51 FText SourceString = Key;
52
53 // Look up entry in specified string table
54 TOptional<FString> TableName = FTextInspector::GetNamespace(Key);
55 if (!TableName.IsSet())
56 {
57 TableName = TEXT("ARTICY");
58 }
59
60 // Find the table
61 FStringTableConstPtr TablePtr = FStringTableRegistry::Get().FindStringTable(FName(TableName.GetValue()));
62 if (TablePtr.IsValid())
63 {
64 // Find the entry
65 const FStringTable* Table = TablePtr.Get();
66 FStringTableEntryConstPtr EntryPtr = Table->FindEntry(FTextKey(Key.ToString()));
67 if (EntryPtr.IsValid())
68 {
69 const FStringTableEntry* TableEntry = EntryPtr.Get();
70 SourceString = FText::FromString(TableEntry->GetSourceString());
71 }
72 }
73
74 if (!SourceString.IsEmpty() && !SourceString.EqualTo(MissingEntry) && !SourceString.EqualTo(Key))
75 {
76 if (ResolveTextExtension)
77 {
78 return ResolveText(Outer, &SourceString);
79 }
80 return FText(SourceString);
81 }
82
83 // By default, return via the key
84 if (ResolveTextExtension && !Key.ToString().EndsWith(".PreviewText"))
85 {
86 return ResolveText(Outer, &Key);
87 }
88
89 // Return backup text, if relevant
90 if (BackupText)
91 {
92 return *BackupText;
93 }
94
95 return Key;
96 }
97
98protected:
99 bool bDataLoaded = false;
100 bool bListenerSet = false;
101};
Definition ArticyLocalizationSubsystem.h:15
Definition ArticyLocalizerSystem.h:19