get picture com S ou N em lugar de Y ou N

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Ary
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 17 Abr 2021 17:10
Localização: Rio de Janeiro

get picture com S ou N em lugar de Y ou N

Mensagem por Ary »

Boa noite !

No Alaska Xbase eu usaria setlocale() para setar o carácter que seria atribuído a true ou false em um campo lógic, da seguinte forma:

setlocale (NLS_SYES, "S")

setlocale (NLS_SNO, "N")

assim, quando eu usasse "get _status picture "Y"", o usuário selecionaria "S" para sim (true) ou "N" para não (false).

Porém em Harbour, quando uso isto, aparece "Y" para sim (true) e "N" para não (false).

Existe alguma forma de mudar isso como no Alaska?
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

get picture com S ou N em lugar de Y ou N

Mensagem por alxsts »

Olá!

No xHarbour tem as funções IsAffirm() e IsNegative(). Testei no Harbour 3.2.0 dev (r1612161005) Nightly e funcionam.
IsAffirm()
Converts "Yes" in a national language to a logical value.
Syntax
IsAffirm( <cChar> ) --> lIsYes

Arguments
<cChar>
This is a single character. It is compared case-insensitive with the first letter of the word "Yes" of the currently selected national language. Return
The function returns .T. (true) if <cChar> is the first letter of the word "Yes" in the currently selected national language (see HB_LangSelect()). Otherwise, .F. (false) is returned.
Info
See also: HB_LangSelect(), IsNegative()
Category: Language specific , xHarbour extensions
Source: rtl\natmsg.c
LIB: xhb.lib
DLL: xhbdll.dll

Example
// The example uses three national languages and displays the result
// of IsAffirm().

Código: Selecionar todos

   REQUEST HB_LANG_DE          // request German language
   REQUEST HB_LANG_FR          // request French language

   PROCEDURE Main

      // English language is default: "Yes"

      ? IsAffirm( "J" )        // result: .F.
      ? IsAffirm( "O" )        // result: .F.
      ? IsAffirm( "Y" )        // result: .T.

      HB_LangSelect( "DE" )    // "Ja" == "Yes"

      ? IsAffirm( "J" )        // result: .T.
      ? IsAffirm( "O" )        // result: .F.
      ? IsAffirm( "Y" )        // result: .F.


      HB_LangSelect( "FR" )    // "Oui" == "Yes"

      ? IsAffirm( "J" )        // result: .F.
      ? IsAffirm( "O" )        // result: .T.
      ? IsAffirm( "Y" )        // result: .F.
   RETURN
É só adaptar para Português.
[]´s
Alexandre Santos (AlxSts)
Ary
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 17 Abr 2021 17:10
Localização: Rio de Janeiro

get picture com S ou N em lugar de Y ou N

Mensagem por Ary »

Funcionou para dias da semana, etc

Mas o get picture "Y" continua mostrando "Y" ou "N"

Obrigado de qq forma
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

get picture com S ou N em lugar de Y ou N

Mensagem por Itamar M. Lins Jr. »

Olá!
Cadê seu teste ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Ary
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 17 Abr 2021 17:10
Localização: Rio de Janeiro

get picture com S ou N em lugar de Y ou N

Mensagem por Ary »

Código: Selecionar todos

request HB_LANG_PT

procedure main

local _logic := .t.

hb_langselect ("PT")

clear

@ 10, 10 say "teste" get _logic picture "Y"

read

?_logic

wait

return
Abaixo postei uma pequena imagem com o resultado, no Alaska eu teria "S" ou "N"
Anexos
Resultado:
Resultado:
Screenshot_1.png (703 Bytes) Exibido 543 vezes
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

get picture com S ou N em lugar de Y ou N

Mensagem por alxsts »

Olá!
Itamar M. Lins Jr. escreveu:Cadê seu teste ?
Eu testei a existência das funções no prompt do HbMk2 (HbMk2 .).

Mas no Harbour não existe a funcionalidade pretendida. Teria que implementar.

Exemplo que tem no xHarbour Language Reference Guide

Código: Selecionar todos

// The example uses three national languages and displays the result
// of IsAffirm().

   REQUEST HB_LANG_DE          // request German language
   REQUEST HB_LANG_FR          // request French language

   PROCEDURE Main

      // English language is default: "Yes"

      ? IsAffirm( "J" )        // result: .F.
      ? IsAffirm( "O" )        // result: .F.
      ? IsAffirm( "Y" )        // result: .T.

      HB_LangSelect( "DE" )    // "Ja" == "Yes"

      ? IsAffirm( "J" )        // result: .T.
      ? IsAffirm( "O" )        // result: .F.
      ? IsAffirm( "Y" )        // result: .F.


      HB_LangSelect( "FR" )    // "Oui" == "Yes"

      ? IsAffirm( "J" )        // result: .F.
      ? IsAffirm( "O" )        // result: .T.
      ? IsAffirm( "Y" )        // result: .F.
   RETURN
Exemplo que eu criei

Código: Selecionar todos

REQUEST HB_LANG_PT    
REQUEST HB_CODEPAGE_PT850

PROCEDURE Main

   LOCAL cSN := .t., GetList := {}

   Hb_LangSelect( 'PT' )
   Hb_cdpSelect( "PT850" )

   SetMode( 25,80 )
   CLS

   @ 10,10 Say "Confirma (S/N)?: " Get cSN PICTURE "!A" VALID IsAffirm( cSN )
   READ

   Hb_Alert( "Resposta " + If( cSN == "S", "Sim", "Não" ) )
   
RETURN NIL
Mas isto não ajuda muito. A variável do GET tem que ser tipo char. Seria até melhor testar o VALID "S" ou "N"...
[]´s
Alexandre Santos (AlxSts)
Ary
Usuário Nível 1
Usuário Nível 1
Mensagens: 24
Registrado em: 17 Abr 2021 17:10
Localização: Rio de Janeiro

get picture com S ou N em lugar de Y ou N

Mensagem por Ary »

Eu estou pensando em uma solução usando isaffirm () e isnegative (), mas vou ter que converter a variável para char e depois antes de gravar, converter de novo para logic
Responder