Spanish [SOLUCIONADO] ¿Cómo extraigo los valores de un map de otro módulo?

tomky

Active Member
Licensed User
Hola.

Estoy utilizando la librería AndroidResources para el multiidioma, y su aplicación práctica https://www.b4x.com/android/forum/threads/localize-your-app-using-androidresources.19165/
¿Cómo extraigo los valores del map si muevo su código a un Módulo de código?

Lo conseguí hacer, ¿pero es la única manera?

Hago la llamada por ejemplo desde la activity Preferencias
B4X:
ActionBar.Title = nombremodulo.traducir("preferences_activity_title")

En el módulo de código tengo
B4X:
Sub Process_Globals

    Dim AndroidResources1 As AndroidResources
    Dim ResourceStrings As Map
End Sub


Sub traducir(text As String) As String

    Dim defaultText As String

    ResourceStrings.Initialize
    defaultText = ""

    Select text
        Case "preferences_activity_title"
            defaultText = "Default preferences activity title"
        Case "favorites_activity_title"
            defaultText = "Default favorites activity title"
        '...
    End Select

    ResourceStrings.Put(text, defaultText)

    ResourceStrings=AndroidResources1.GetApplicationStrings(ResourceStrings)

    Return ResourceStrings.Get(text)
End Sub

Y cada archivo strings.xml tiene su línea
B4X:
    <string name="preferences_activity_title">Preferencias</string>
'...
Con su texto correspondiente en su idioma.

Gracias.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

No se si entendi bien la pregunta, pero si tienes un map en modulo de codigo, y lo quieres pasar a un activity, es como se hace siempre:

B4X:
Dim ResourceStrings As Map

ResourceStrings.Initialize
ResourceStrings.Put(text, defaultText)

CallSubDelayed2(Nombre formulario, "Nombre del Sub",ResourceStrings)

Saludos
 

tomky

Active Member
Licensed User
Gracias bgsoft.
Quería decir de enviar la información al módulo de código para que éste hiciera el trabajo. Y no al revés.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola tomky:

Simplemente haces una llamada al sub que te interese:

B4X:
  NombreModulo.NombreSub   

  ' si hay parámetros los pasas asi
  NombreModulo.NombreSub(parametro1,parametro2, etc)

Saludos
 

dar2o3

Active Member
Licensed User
Longtime User
También puedes pasar el map que contiene los datos al módulo, seria algo así:



B4X:
sub tratardatos (mapa1 as map)  as boolean
    ' Haces lo que quieras con el map

   'Si todo es correcto
    return true

  'Si a ocurrido algún error
   return false

end sub


y lo llamaríamos de la siguiente manera:

B4X:
if nombremodulo.tratardatos(nombremap)=true then
       'Si llega aquí es que la rutina a echo su trabajo sin devolver ningún error

   else
  
     'Si llegamos aquí habrá ocurrido algún error y tendrías que revisar cual a sido y actuar en consecuencia.

end if
 
Last edited:
Top