Локализация

Доброго времени суток!
Столкнулся с такой ситуацией. Для справочного поля в sql-запросе select через left join я выходил на "Название" значения (вместо айди, которое по умолчанию). Но, как выяснилось с помощью "Sys{объект}Lcz", отображались в запросе значения из другой локализации справочника, не "ru-RU". И на данный момент установлено у меня 2 локализации: RU и EN.

Вопрос. Можно ли как-то избавится от иной локализации вовсе, оставив русскую соответственно? Ну или убрать для уже существующих в системе объектов иную локализацию?
П.с. Мои коллеги подсказали, что, убрав локализацию, это повысило бы чутка быстродействие системы.

Нравится

3 комментария

Здравствуйте.

 

Их можно выключить, отключив признак "активный". Это, а также список всех языков в системе можно увидеть в Languages разделе в дизайнере системы. 

Я бы не рекомендовал удалять английскую культуру, это может за собой повлечь проблемы в работе системы, которые сразу сложно предугадать. К тому же, в приложении почти всё завязывается на анг. культуру. Если бы речь шла об удалении Испанского или Иврита, то последствий было бы меньше или вовсе никаких. 

Скрипты есть, но выполнять их стоит на свой страх и риск. Скрипт удаляет все языки, которые не используются в профиле пользователей и который не является основным. 

Если всё же вы решитесь удалять анг. культуру, сделайте копию приложения и удалите её там. После чего проверьте работу приложения в разделах, компиляцию, генерацию кода, установку пакетов - по максимуму провести тестирование. 

 

IF OBJECT_ID('tempdb..#UsedCultures') IS NOT NULL
       DROP Table #UsedCultures

-- Получение списка используемых культур
SELECT DISTINCT cult.Id
INTO #UsedCultures
FROM SysCulture cult
INNER JOIN SysAdminUnit au
       ON au.SysCultureId = cult.Id

INSERT INTO #UsedCultures
    (Id)
SELECT
    SysSettingsValue.GuidValue
FROM
    SysSettingsValue
INNER JOIN SysSettings
    ON SysSettings.Id = SysSettingsValue.SysSettingsId
WHERE
    SysSettings.Code = 'PrimaryCulture'

-- Получение списка таблиц, из которых нужно удалять данные
DECLARE TableNamesCursor CURSOR FOR
SELECT
        t3.TABLE_NAME AS ChildTableName  
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS t1 
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS t2 ON t1.UNIQUE_CONSTRAINT_NAME = t2.CONSTRAINT_NAME
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS t3 ON t1.CONSTRAINT_NAME = t3.CONSTRAINT_NAME
WHERE
       t2.TABLE_NAME = 'SysCulture'
       and t2.COLUMN_NAME = 'Id'
       and t3.COLUMN_NAME = 'SysCultureId'

DECLARE @TableName SYSNAME

OPEN TableNamesCursor
FETCH NEXT FROM TableNamesCursor INTO @TableName
WHILE @@FETCH_STATUS = 0  
BEGIN  
       PRINT @TableName
       DECLARE @Sql NVARCHAR(MAX);
       SET @Sql = 'DELETE FROM ' + @TableName + '
            WHERE SysCultureId NOT IN (SELECT Id FROM #UsedCultures)';
       PRINT @Sql
       EXECUTE sp_executesql @Sql

       FETCH NEXT FROM TableNamesCursor INTO @TableName
END
CLOSE TableNamesCursor
DEALLOCATE TableNamesCursor

DELETE FROM SysCulture
WHERE Id NOT IN (SELECT Id FROM #UsedCultures)

IF OBJECT_ID('tempdb..#UsedCultures') IS NOT NULL
       DROP Table #UsedCultures

K.Ivan,

здравствуйте!

Нет, удалять англ. культуру не собираемся.

Проблема в том, что меняются данные в таблице локализации, а не в таблице справочника.
Не подскажете, как обеспечить сохранение данных в справочнике, а не в таблице локализации? Или как привязать таблицу локализации объекта к пакету?

И после Вашего ответа я поставил на русской культуре признак "по умолчанию", с англ. признак убрался, но признак "активный" на англ. культуре не даёт снять (серый чекбокс).

Английскую культуру деактивировать полностью невозможно, серый чекбокс - это нормальное поведение. 

 

Опишите, пожалуйста, детальнее касательно проблемы с изменением данные в таблице локализации, не до конца понятна суть вопроса.

Показать все комментарии