RWS / Sdl-studio-powershell-toolkit

The SDL Studio PowerShell Toolkit allows you to script the Project Automation API that is available with SDL Trados Studio Professional.
Apache License 2.0
8 stars 5 forks source link

New-Object : Cannot find an overload for "FileBasedTranslationMemory" and the ... #1

Closed FranckLMP closed 6 years ago

FranckLMP commented 8 years ago

I tried to copy PowerShell code from the sample and run it in PowerShell command-line and I get the following error:

New-Object : Cannot find an overload for "FileBasedTranslationMemory" and the
argument count: "6".
At C:\bin\ps1\New-FileBasedTM.ps1:38 char:2
+     New-Object
Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemory ...
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [New-Object], MethodExcept

ion


My Powershell code is as follows and I wonder what is wrong:

add-type -path 'C:\Program Files (x86)\SDL\SDL Trados Studio\Studio4\Sdl.LanguagePlatform.TranslationMemory.dll' ;

add-type -path 'C:\Program Files (x86)\SDL\SDL Trados Studio\Studio4\Sdl.LanguagePlatform.TranslationMemoryApi.dll' ;

function Get-DefaultFuzzyIndexes { return Sdl.LanguagePlatform.TranslationMemory.FuzzyIndexes::SourceCharacterBased -band Sdl.LanguagePlatform.TranslationMemory.FuzzyIndexes::SourceWordBased -band Sdl.LanguagePlatform.TranslationMemory.FuzzyIndexes::TargetCharacterBased -band

}

function Get-DefaultRecognizers { return Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers::RecognizeAcronyms -band Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers::RecognizeAll -band Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers::RecognizeDates -band Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers::RecognizeMeasurements -band Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers::RecognizeNumbers -band Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers::RecognizeTimes -band

}

function New-FileBasedTM { param([String] $filePath,[String] $description, [String] $sourceLanguageName, [String] $targetLanguageName, Sdl.LanguagePlatform.TranslationMemory.FuzzyIndexes $fuzzyIndexes, Sdl.LanguagePlatform.Core.Tokenization.BuiltinRecognizers $recognizers)

$sourceLanguage = Get-CultureInfo $sourceLanguageName;
$targetLanguage = Get-CultureInfo $targetLanguageName;

[Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemory] $tm = 
New-Object Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemory ($filePath, $description, $sourceLanguage, $targetLanguage, $fuzzyIndexes, $recognizers);   

}

function Open-FileBasedTM { param([String] $filePath) [Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemory] $tm = New-Object Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemory ($filePath);

return $tm;

}

function Get-TargetTMLanguage { param([String] $filePath)

[Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemory] $tm = Open-FileBasedTM $filePath;
[Sdl.LanguagePlatform.TranslationMemoryApi.FileBasedTranslationMemoryLanguageDirection] $direction = $tm.LanguageDirection;
return $direction.TargetLanguage;   

}

function Get-Language { param([String] $languageName)

[Sdl.Core.Globalization.Language] $language = New-Object Sdl.Core.Globalization.Language ($languageName)
return $language;

}

function Get-Languages { param([String[]] $languageNames) [Sdl.Core.Globalization.Language[]]$languages = @(); foreach($lang in $languageNames) { $newlang = Get-Language $lang;

    $languages = $languages + $newlang
}

return $languages

}

function Get-CultureInfo { param([String] $languageName) $cultureInfo = Get-Language $languageName; return [System.Globalization.CultureInfo] $cultureInfo.CultureInfo; }

$sdltmpath = "c:\temp\mysdltm.sdltm" ;

$sdltmdesc = "my sdl tm description" ;

$sdltmsrclangcode = "de-DE" ;

$sdltmtgtlangcode = "en-GB" ;

$sourceLanguage = Get-CultureInfo $sdltmsrclangcode ;

$targetLanguage = Get-CultureInfo $sdltmtgtlangcode ;

$indexes = Get-DefaultFuzzyIndexes ;

$recognizers = Get-DefaultRecognizers ;

New-FileBasedTM $sdltmpath, $sdltmdesc, "de-DE", "en-GB", $indexes, $recognizers ;

alexcpascariu commented 6 years ago

Hello @FranckLMP ,

The error occurs because the constructor for the FileBasedTranslationMemory requires 8 parameters, you need to also add Sdl.LanguagePlatform.Core.Tokenization.TokenizerFlags and Sdl.LanguagePlatform.TranslationMemory.WordCountFlags, these are also enumerations.

Moreover, when calling the function "New-FileBasedTM" try to supply the parameter name for each passed parameter(Ex: New-FileBasedTM -filePath $sdltmpath -description $sdltmdesc -sourceLanguageName $sourceLanguage -targetLanguageName $targetLanguage -fuzzyIndexes $indexes -recognizers $recognizers -tokenizerFlags $tokenizerFlags -wordCountFlag $wordCountFlags ), because an error will occur if you don't. I will also update the PowerShellToolkit to fix this issue.

I've attached an updated script, hope this helps.

NewFileBasedTM.txt

Have a nice day! Alex