Página 1 de 1

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

Enviado: 16 Jun 2021 04:00
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?

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

Enviado: 16 Jun 2021 14:29
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.

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

Enviado: 16 Jun 2021 16:24
por Ary
Funcionou para dias da semana, etc

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

Obrigado de qq forma

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

Enviado: 16 Jun 2021 16:56
por Itamar M. Lins Jr.
Olá!
Cadê seu teste ?

Saudações,
Itamar M. Lins Jr.

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

Enviado: 16 Jun 2021 20:44
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"

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

Enviado: 16 Jun 2021 21:13
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"...

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

Enviado: 16 Jun 2021 21:40
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