bool LocalizationCommandletTasks::ImportTextForCulture(const TSharedRef<SWindow>& ParentWindow, ULocalizationTarget* const Target, const FString& CultureName, const TOptional<FString> FilePath) { FCulturePtr Culture = FInternationalization::Get().GetCulture(CultureName); if (!Culture.IsValid()) { return false; } TArray<LocalizationCommandletExecution::FTask> Tasks; const bool ShouldUseProjectFile = !Target->IsMemberOfEngineTargetSet(); const FString DefaultImportScriptPath = LocalizationConfigurationScript::GetImportTextConfigPath(Target, TOptional<FString>(CultureName)); const FString ImportScriptPath = FPaths::CreateTempFilename(*FPaths::GetPath(DefaultImportScriptPath), *FPaths::GetBaseFilename(DefaultImportScriptPath), *FPaths::GetExtension(DefaultImportScriptPath, true)); LocalizationConfigurationScript::GenerateImportTextConfigFile(Target, TOptional<FString>(CultureName), FilePath).Write(ImportScriptPath); Tasks.Add(LocalizationCommandletExecution::FTask(LOCTEXT("ImportTaskName", "Import Translations"), ImportScriptPath, ShouldUseProjectFile)); const FString ReportScriptPath = LocalizationConfigurationScript::GetWordCountReportConfigPath(Target); LocalizationConfigurationScript::GenerateWordCountReportConfigFile(Target).Write(ReportScriptPath); Tasks.Add(LocalizationCommandletExecution::FTask(LOCTEXT("ReportTaskName", "Generate Reports"), ReportScriptPath, ShouldUseProjectFile)); FFormatNamedArguments Arguments; Arguments.Add(TEXT("CultureName"), FText::FromString(Culture->GetDisplayName())); Arguments.Add(TEXT("TargetName"), FText::FromString(Target->Settings.Name)); const FText WindowTitle = FText::Format(LOCTEXT("ImportCultureForTargetWindowTitle", "Import {CultureName} Translations for Target {TargetName}"), Arguments); bool HasSucceeeded = LocalizationCommandletExecution::Execute(ParentWindow, WindowTitle, Tasks); IFileManager::Get().Delete(*ImportScriptPath); // Don't clutter up the loc config directory with scripts for individual cultures. return HasSucceeeded; }
FText SLocalizationDashboardTargetRow::GetCulturesText() const { FLocalizationTargetSettings* const TargetSettings = GetTargetSettings(); if (TargetSettings) { TArray<FString> OrderedCultureNames; OrderedCultureNames.Add(TargetSettings->NativeCultureStatistics.CultureName); for (auto& ForeignCultureStatistics : TargetSettings->SupportedCulturesStatistics) { OrderedCultureNames.Add(ForeignCultureStatistics.CultureName); } FString Result; for (FString& CultureName : OrderedCultureNames) { const FCulturePtr Culture = FInternationalization::Get().GetCulture(CultureName); if (Culture.IsValid()) { const FString CultureDisplayName = Culture->GetDisplayName(); if (!Result.IsEmpty()) { Result.Append(TEXT(", ")); } Result.Append(CultureDisplayName); } } return FText::FromString(Result); } return FText::GetEmpty(); }
void FOneSkyLocalizationServiceProvider::ExportCultureForTargetToOneSky_Callback(const FLocalizationServiceOperationRef& Operation, ELocalizationServiceOperationCommandResult::Type Result, bool bIsTargetSet) { TSharedPtr<FUploadLocalizationTargetFile, ESPMode::ThreadSafe> UploadLocalizationTargetOp = StaticCastSharedRef<FUploadLocalizationTargetFile>(Operation); bool bError = !(Result == ELocalizationServiceOperationCommandResult::Succeeded); FText ErrorText = FText::GetEmpty(); FGuid InTargetGuid; FString InRelativeInputFilePathAndName; FString TargetName = ""; FString CultureName = ""; ULocalizationTarget* Target = nullptr; if (UploadLocalizationTargetOp.IsValid()) { InTargetGuid = UploadLocalizationTargetOp->GetInTargetGuid(); CultureName = UploadLocalizationTargetOp->GetInLocale(); InRelativeInputFilePathAndName = UploadLocalizationTargetOp->GetInRelativeInputFilePathAndName(); TargetName = FPaths::GetBaseFilename(InRelativeInputFilePathAndName); FString EngineOrGamePath = FPaths::GetBaseFilename(FPaths::GetPath(FPaths::GetPath(FPaths::GetPath(InRelativeInputFilePathAndName)))); bool bIsEngineTarget = EngineOrGamePath == "Engine"; Target = ILocalizationModule::Get().GetLocalizationTargetByName(TargetName, bIsEngineTarget); // Remove each file we get a callback for so we know when we've gotten a callback for all of them FilesDownloadingForImportFromOneSky.Remove(InRelativeInputFilePathAndName); ErrorText = UploadLocalizationTargetOp->GetOutErrorText(); FilesUploadingForExportToOneSky.Remove(InRelativeInputFilePathAndName); int32 TotalNumber = 0; if (bIsTargetSet) { for (ULocalizationTarget* LocalizationTarget : Target->GetOuterULocalizationTargetSet()->TargetObjects) { TotalNumber += LocalizationTarget->Settings.SupportedCulturesStatistics.Num(); } } else { TotalNumber = Target->Settings.SupportedCulturesStatistics.Num(); } // Update progress bar GWarn->StatusUpdate(TotalNumber - FilesUploadingForExportToOneSky.Num(), TotalNumber, LOCTEXT("UploadingFilestoLocalizationService", "Uploading Files to Localization Service...")); if (FilesUploadingForExportToOneSky.Num() == 0) { GWarn->EndSlowTask(); } } // Try to get display name FInternationalization& I18N = FInternationalization::Get(); FCulturePtr CulturePtr = I18N.GetCulture(CultureName); FString CultureDisplayName = CultureName; if (CulturePtr.IsValid()) { CultureName = CulturePtr->GetDisplayName(); } if (!bError && ErrorText.IsEmpty()) { FText SuccessText = FText::Format(LOCTEXT("ExportTranslationsToTranslationServiceSuccess", "{0} translations for {1} target uploaded for processing to Translation Service."), FText::FromString(CultureDisplayName), FText::FromString(TargetName)); FMessageLog TranslationEditorMessageLog("TranslationEditor"); TranslationEditorMessageLog.Info(SuccessText); TranslationEditorMessageLog.Notify(SuccessText, EMessageSeverity::Info, true); } else { if (ErrorText.IsEmpty()) { ErrorText = LOCTEXT("ExportToLocalizationServiceUnspecifiedError", "An unspecified error occured when trying to export to the Localization Service."); } FText ErrorNotify = FText::Format(LOCTEXT("SaveSelectedTranslationsToTranslationServiceFail", "{0} translations for {1} target failed to export to Translation Service!"), FText::FromString(CultureDisplayName), FText::FromString(TargetName)); FMessageLog TranslationEditorMessageLog("TranslationEditor"); TranslationEditorMessageLog.Error(ErrorNotify); TranslationEditorMessageLog.Error(ErrorText); TranslationEditorMessageLog.Notify(ErrorNotify); } }