我有一个SQL Server 2014表dbo.StringTranslation
,其中有列Id int, StringId int, LanguageId int, String nvarchar(max)
,其中存储了翻译的语言字符串。
新的字符串来自下载的文件(通过Crowdin的api生成的.PO),我使用powershell脚本来解析.po文件以寻找新的翻译内容({不在dbo.StringTranslation
中)。然后将新的翻译内容插入dbo.StringTranslation
中。
这对除波兰语(pl)以外的所有语言(fr,it,de,da,sv,no,es)都适用。
我以这种方式比较字符串:
#existing strings
$SqlCmd = New-Object -TypeName System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "SELECT t.String FROM dbo.StringTranslation t WHERE t.LanguageId = 7;"
$SqlCmd.Connection = $SqlConn
$SqlAdp = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter
$SqlAdp.SelectCommand = $SqlCmd
$existingStringsDs = New-Object -TypeName System.Data.DataSet
$SqlAdp.Fill($existingStringsDs)
$SqlConn.Close()
#checking if string already exists
$dbString = $existingStringsDs.Tables[0].Select("String='" + $sourceString.Replace("'", "''") + "'")
If ($dbString.length -eq 0) {
"$sourceString does not exist in dbo.String"
#INSERT INTO...
}
当我进行抛光时,.Select(部分)中的某些字符串未正确匹配。
示例:“相册usunięty”存储在数据库中,但是
.Select("Album usunięty")
返回一个空行($ dbString.length -eq 0)。
我认为必须将Locale / CultureInfo看来是“相册usunięty”转换为“相册usuniÄty”并因此未找到。
我尝试在.Select(之前设置表的语言环境,但是,它不起作用。
$table = $existingStringsDs.Tables[0]
$culture = New-Object system.globalization.cultureinfo($cultureInfo)
$table.Locale = $culture
$table.Select("...
我在做什么错了?