Merging //UE4/Main/Engine/... to //UE4/Dev-Mobile

#rb None

[CL 4749281 by Jack Porter in Dev-Mobile branch]
This commit is contained in:
Jack Porter
2019-01-17 21:54:28 -05:00
parent 9aac67438d
commit 068ca68f0b
18594 changed files with 2458808 additions and 125884 deletions

View File

@@ -18,10 +18,13 @@ bool FTextLocalizationResourceGenerator::GenerateLocMeta(const FLocTextHelper& I
return true;
}
bool FTextLocalizationResourceGenerator::GenerateLocRes(const FLocTextHelper& InLocTextHelper, const FString& InCultureToGenerate, const bool bSkipSourceCheck, const FTextLocalizationResourceId& InLocResID, FTextLocalizationResource& OutLocRes)
bool FTextLocalizationResourceGenerator::GenerateLocRes(const FLocTextHelper& InLocTextHelper, const FString& InCultureToGenerate, const bool bSkipSourceCheck, const FTextKey& InLocResID, FTextLocalizationResource& OutLocRes, const int32 InPriority)
{
const bool bIsNativeCulture = InCultureToGenerate == InLocTextHelper.GetNativeCulture();
FCulturePtr Culture = FInternationalization::Get().GetCulture(InCultureToGenerate);
// Add each manifest entry to the LocRes file
InLocTextHelper.EnumerateSourceTexts([&InLocTextHelper, &InCultureToGenerate, &bSkipSourceCheck, &InLocResID, &OutLocRes](TSharedRef<FManifestEntry> InManifestEntry) -> bool
InLocTextHelper.EnumerateSourceTexts([&InLocTextHelper, &InCultureToGenerate, &bSkipSourceCheck, &InLocResID, &OutLocRes, InPriority, bIsNativeCulture, Culture](TSharedRef<FManifestEntry> InManifestEntry) -> bool
{
// For each context, we may need to create a different or even multiple LocRes entries.
for (const FManifestContext& Context : InManifestEntry->Contexts)
@@ -30,15 +33,35 @@ bool FTextLocalizationResourceGenerator::GenerateLocRes(const FLocTextHelper& In
FLocItem TranslationText;
InLocTextHelper.GetRuntimeText(InCultureToGenerate, InManifestEntry->Namespace, Context.Key, Context.KeyMetadataObj, ELocTextExportSourceMethod::NativeText, InManifestEntry->Source, TranslationText, bSkipSourceCheck);
// Add this entry to the LocRes
OutLocRes.AddEntry(InManifestEntry->Namespace.GetString(), Context.Key.GetString(), InManifestEntry->Source.Text, TranslationText.Text, InLocResID);
// Is this entry considered translated? Native entries are always translated
const bool bIsTranslated = bIsNativeCulture || !InManifestEntry->Source.IsExactMatch(TranslationText);
if (bIsTranslated)
{
// Validate translations that look like they could be format patterns
if (Culture && TranslationText.Text.Contains(TEXT("{"), ESearchCase::CaseSensitive))
{
const FTextFormat FmtPattern = FTextFormat::FromString(TranslationText.Text);
TArray<FString> ValidationErrors;
if (!FmtPattern.ValidatePattern(Culture, ValidationErrors))
{
FString Message = FString::Printf(TEXT("Format pattern '%s' (%s,%s) generated the following validation errors for '%s':"), *TranslationText.Text, *InManifestEntry->Namespace.GetString(), *Context.Key.GetString(), *InCultureToGenerate);
for (const FString& ValidationError : ValidationErrors)
{
Message += FString::Printf(TEXT("\n - %s"), *ValidationError);
}
UE_LOG(LogTextLocalizationResourceGenerator, Warning, TEXT("%s"), *FLocTextHelper::SanitizeLogOutput(Message));
}
}
// Add this entry to the LocRes
OutLocRes.AddEntry(InManifestEntry->Namespace.GetString(), Context.Key.GetString(), InManifestEntry->Source.Text, TranslationText.Text, InPriority, InLocResID);
}
}
return true; // continue enumeration
}, true);
OutLocRes.DetectAndLogConflicts();
return true;
}
@@ -142,20 +165,21 @@ bool FTextLocalizationResourceGenerator::GenerateLocResAndUpdateLiveEntriesFromC
}
}
TArray<TSharedPtr<FTextLocalizationResource>> TextLocalizationResources;
for (const FString& CultureName : CulturesToGenerate)
FTextLocalizationResource TextLocalizationResource;
for (int32 CultureIndex = 0; CultureIndex < CulturesToGenerate.Num(); ++CultureIndex)
{
const FString& CultureName = CulturesToGenerate[CultureIndex];
const FString CulturePath = DestinationPath / CultureName;
const FString ResourceFilePath = FPaths::ConvertRelativePathToFull(CulturePath / ResourceName);
TSharedPtr<FTextLocalizationResource>& LocRes = TextLocalizationResources.Add_GetRef(MakeShared<FTextLocalizationResource>());
if (!GenerateLocRes(LocTextHelper, CultureName, bSkipSourceCheck, FTextLocalizationResourceId(ResourceFilePath), *LocRes))
if (!GenerateLocRes(LocTextHelper, CultureName, bSkipSourceCheck, FTextKey(ResourceFilePath), TextLocalizationResource, CultureIndex))
{
UE_LOG(LogTextLocalizationResourceGenerator, Error, TEXT("Failed to generate localization resource for culture '%s'."), *CultureName);
return false;
}
}
FTextLocalizationManager::Get().UpdateFromLocalizationResources(TextLocalizationResources);
FTextLocalizationManager::Get().UpdateFromLocalizationResource(TextLocalizationResource);
return true;
}