SQL SERVER, CONSULTA PARA APLICATIVO MULTI-IDIOMAS

ALEXMARCHI 10/09/2012 15:28:23
#409373
Estou com um aplicativo Multi-idioma, só que a equipe de tradução está muito atrasada, o que impede o lançamento do software, ai foi sugerido que se não encontrar no idioma solicitado, que exiba as informações no idioma padrão

é mais ou menos assim tenho os status 1 , 2 e 3 sempre tenho que exibir { 1 , 2 , 3 } vamos imaginar que só o status 1 está traduzido para inglês

eu teria que exibir o status 1 em inglês e o 2 e 3 em português, é mais fácil eu mostrar um exemplo através de script

Citação:


Create Table tb_status
(
cod_status int not null,
Constraint PK_status primary key (cod_status)
)
GO

Create Table tb_idioma
(
cod_idioma varchar(10) not null,
Constraint PK_idioma primary key (cod_idioma)
)
GO

Create Table tb_Cultura_Padrao
(
cod_idioma varchar(10) not null,
Constraint PK_Cultura_Padrao Primary Key (cod_idioma),
Constraint FK_Cultura_Padrao Foreign Key (cod_idioma) references tb_idioma(cod_idioma)
)
GO

Create Table tb_status_idioma
(
cod_status int not null,
cod_idioma varchar(10) not null,
nom_status varchar(50) not null,
constraint pk_status_idioma Primary Key (cod_status,cod_idioma),
constraint fk_status_idioma_01 Foreign Key (cod_status) references tb_status(cod_status),
constraint fk_status_idioma_02 Foreign Key (cod_idioma) references tb_idioma(cod_idioma)
)
GO

insert into tb_status (cod_status) values (1)
insert into tb_status (cod_status) values (2)
insert into tb_status (cod_status) values (3)
GO

insert into tb_idioma(cod_idioma) values ([ô]pt-BR[ô])
insert into tb_idioma(cod_idioma) values ([ô]en-US[ô])
GO

insert into tb_cultura_padrao values ([ô]pt-BR[ô])
GO

insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (1,[ô]en-US[ô],[ô]Active[ô])
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (1,[ô]pt-BR[ô],[ô]Ativo[ô])
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (2,[ô]pt-BR[ô],[ô]Inativo[ô])
insert into tb_status_idioma (cod_status,cod_idioma,nom_status) values (3,[ô]pt-BR[ô],[ô]Outro status[ô])
GO

Drop Procedure Desafio
GO

Create Procedure Desafio
@Idioma_Selecionado varchar(10)
AS
Begin
-- Detecta o Idioma Padrão
DECLARE @Idioma_Padrao varchar(10)
Select TOP 1 @Idioma_Padrao = cod_idioma From tb_Cultura_Padrao

Select A.Cod_Status,
B.Cod_Idioma,
B.nom_status,
Case B.Cod_Idioma
When @Idioma_Selecionado Then 100
When @Idioma_Padrao Then 50
End As Peso
From TB_Status as A
Inner Join TB_Status_Idioma As B On B.cod_status = A.cod_status
Where B.Cod_Idioma = @Idioma_Selecionado
Or B.cod_idioma = @Idioma_Padrao
Order By 4 Desc
End
GO

Execute Desafio [ô]en-US[ô]

/*----------------------------------------------------------------------
O Resultado deveria ser apenas

1 en-US Active 100
2 pt-BR Inativo 50
3 pt-BR Outro status 50

Mas esta Procedure Retorna

1 en-US Active 100
1 pt-BR Ativo 50
2 pt-BR Inativo 50
3 pt-BR Outro status 50
----------------------------------------------------------------------*/



Se alguém puder me ajudar
JEISONANTONI 12/09/2012 19:41:27
#409529
O resultado está certo:
Você tem 4 registros na tabela:
Um deles é o @Idioma_Selecionado
Os demais são o @Idioma_Padrao

select * from From TB_Status as A
Inner Join TB_Status_Idioma As B On B.cod_status = A.cod_status
Where [txt-color=#e80000]B.Cod_Idioma = @Idioma_Selecionado
Or B.cod_idioma = @Idioma_Padrao [/txt-color]

Traz en-US ou pt-BR.
ALEXMARCHI 13/09/2012 17:35:32
#409632
acho que não fui claro

Citação:

eu teria que exibir o status 1 em inglês e o 2 e 3 em português



eu tenho que exibir o status 1 2 e 3, se estiver tudo traduzido eu exibo os 3 no @Idioma_Selecionado, o problema é quando está pela metade, que eu tenho que exibir 1 no @Idioma_Selecionado e os demais no @Idioma_Padrao
EDUMSILVA 21/09/2012 12:56:52
#410168
Para Quando O Idioma Ingles estiver selecionado, em comando SQL, eu encontrei desta Maneira:

Select Distinct *
From TB_STATUS_IDIOMA
minus
Select Distinct *
From TB_STATUS_IDIOMA
where Nom_Status=[ô]Ativo[ô];

Tópico encerrado , respostas não são mais permitidas