?
Solved

Where is user's language property in Access?

Posted on 1999-11-10
15
Medium Priority
?
254 Views
Last Modified: 2008-03-06
I have an Access97 database(on Win95 machine) which connects to a POP3 server and downloads email generated by a web site.  One of the bits of information I can get is the date from the email message header, which I receive as text.  I want to convert this to date format so Access can manipulate it.

Normally I would say e.g. CDate("13 Oct 1999") and have no problems.  BUT I am working in Brazil and most people here have Office installed in Portuguese (however, some have English).  Microsoft being clever-boots that it is, has translated EVERYTHING into Portuguese, even built-in functions.  The CDate in Portuguese Access does not understand English date formats (October = Outobre in Portuguese, it is expecting "13 Out 1999" instead).  However the date information is taken from the email header info, which is controlled by the ISP server, which is in English format and beyond my power to change.

I want to put in a check that looks up whether the user has Portuguese or English Access installed, and then either converts the date to Portuguese via a function, or leaves it alone.  Something like this:

select case (whatlanguageofAccessdoesthiscomputerhave)
case (english)
   lrs_messageSet!Date=CDate(DateOfEmail)
case (brazilianportuguese)
  lrs_messageSet!Date=CDate(ConvertToPortuguese(DateOfEmail))
end select

Does anybody know how to look up what language Access is installed in?  It's gotta be a property somewhere but I can't find it.

Thanks!!

...Pentapod
0
Comment
Question by:pentapod
  • 6
  • 5
  • 3
  • +1
15 Comments
 
LVL 1

Accepted Solution

by:
psmith789 earned 600 total points
ID: 2198091
From the Knowledge base - a kludge, but workable...

Function Language ()
     
Select Case Error$(3)
  Case "Return without GoSub":            Language = "English"
         Case "Return sans GoSub":            Language = "French"
         Case "'Return' ohne 'GoSub'":            Language = "German"
         Case "Return sem GoSub":            Language = "Portuguese"
         Case "Return sin GoSub":            Language = "Spanish"
      End Select  

End Function
0
 
LVL 1

Author Comment

by:pentapod
ID: 2199944
Hi - thanks, it does work, but as you say it's a kludge.  Not very elegant.  I'll give you the points next week, but I'll increase them to 150 if you can tell me the "proper" way of accessing the language property.  

I know it must be somewhere because when I load up my database (written in English Access) on a Portuguese machine it has actually parsed and translated all my code into Portuguese.

e.g.
Now() becomes Agora()
iif(a,b,c) becomes selmed(a,b,c)

asking for trouble if you ask me... but it means that Access must have some way of knowing.

....Pentapod
0
 
LVL 1

Expert Comment

by:psmith789
ID: 2200005
I don't know if you'll find anything more elegant - that was the Microsoft Knowledge Base answer, so I suspect that the language designation is buried pretty well. (Not that I think that MS is always the best source!)

I can't find any API magic to do this - maybe some wizard with arcane knowledge of Access internals will post something...
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
LVL 1

Author Comment

by:pentapod
ID: 2200069
OK, well, it works, I will accept your answer on Monday just in case any Access Wizards have any more suggestions before then (probably not by the sounds of it).

Thanks,

....Pentapod
0
 
LVL 12

Expert Comment

by:Trygve
ID: 2202613
Testing 123

I have had problems posting to this question. Just testing.
0
 
LVL 12

Expert Comment

by:Trygve
ID: 2202615
' Copy From here
' ---Posted by Dev Ashish---
' Retrieve Locale Info
' (Q)    How do I retrieve Locale specific information, such as Country Name, from Registry?
' (A)    Use the included function fLocaleInfo. Pass it one of the declared constants, depending on what value you want to retrieve.

'************* Code Start ************
Public Const LOCALE_ILANGUAGE = &H1         '  language id
Public Const LOCALE_SLANGUAGE = &H2         '  localized name of language
Public Const LOCALE_SENGLANGUAGE = &H1001   '  English name of language
Public Const LOCALE_SABBREVLANGNAME = &H3   '  abbreviated language name
Public Const LOCALE_SNATIVELANGNAME = &H4   '  native name of language
Public Const LOCALE_ICOUNTRY = &H5          '  country code
Public Const LOCALE_SCOUNTRY = &H6          '  localized name of country
Public Const LOCALE_SENGCOUNTRY = &H1002    '  English name of country
Public Const LOCALE_SABBREVCTRYNAME = &H7   '  abbreviated country name
Public Const LOCALE_SNATIVECTRYNAME = &H8   '  native name of country
Public Const LOCALE_IDEFAULTLANGUAGE = &H9  '  default language id
Public Const LOCALE_IDEFAULTCOUNTRY = &HA   '  default country code
Public Const LOCALE_IDEFAULTCODEPAGE = &HB  '  default code page
Public Const LOCALE_SLIST = &HC             '  list item separator
Public Const LOCALE_IMEASURE = &HD          '  0 = metric, 1 = US
Public Const LOCALE_SDECIMAL = &HE          '  decimal separator
Public Const LOCALE_STHOUSAND = &HF         '  thousand separator
Public Const LOCALE_SGROUPING = &H10        '  digit grouping
Public Const LOCALE_IDIGITS = &H11          '  number of fractional digits
Public Const LOCALE_ILZERO = &H12           '  leading zeros for decimal
Public Const LOCALE_SNATIVEDIGITS = &H13    '  native ascii 0-9
Public Const LOCALE_SCURRENCY = &H14        '  local monetary symbol
Public Const LOCALE_SINTLSYMBOL = &H15      '  intl monetary symbol
Public Const LOCALE_SMONDECIMALSEP = &H16   '  monetary decimal separator
Public Const LOCALE_SMONTHOUSANDSEP = &H17  '  monetary thousand separator
Public Const LOCALE_SMONGROUPING = &H18     '  monetary grouping
Public Const LOCALE_ICURRDIGITS = &H19      '  # local monetary digits
Public Const LOCALE_IINTLCURRDIGITS = &H1A  '  # intl monetary digits
Public Const LOCALE_ICURRENCY = &H1B        '  positive currency mode
Public Const LOCALE_INEGCURR = &H1C         '  negative currency mode
Public Const LOCALE_SDATE = &H1D            '  date separator
Public Const LOCALE_STIME = &H1E            '  time separator
Public Const LOCALE_SSHORTDATE = &H1F       '  short date format string
Public Const LOCALE_SLONGDATE = &H20        '  long date format string
Public Const LOCALE_STIMEFORMAT = &H1003    '  time format string
Public Const LOCALE_IDATE = &H21            '  short date format ordering
Public Const LOCALE_ILDATE = &H22           '  long date format ordering
Public Const LOCALE_ITIME = &H23            '  time format specifier
Public Const LOCALE_ICENTURY = &H24         '  century format specifier
Public Const LOCALE_ITLZERO = &H25          '  leading zeros in time field
Public Const LOCALE_IDAYLZERO = &H26        '  leading zeros in day field
Public Const LOCALE_IMONLZERO = &H27        '  leading zeros in month field
Public Const LOCALE_S1159 = &H28            '  AM designator
Public Const LOCALE_S2359 = &H29            '  PM designator
Public Const LOCALE_SDAYNAME1 = &H2A        '  long name for Monday
Public Const LOCALE_SDAYNAME2 = &H2B        '  long name for Tuesday
Public Const LOCALE_SDAYNAME3 = &H2C        '  long name for Wednesday
Public Const LOCALE_SDAYNAME4 = &H2D        '  long name for Thursday
Public Const LOCALE_SDAYNAME5 = &H2E        '  long name for Friday
Public Const LOCALE_SDAYNAME6 = &H2F        '  long name for Saturday
Public Const LOCALE_SDAYNAME7 = &H30        '  long name for Sunday
Public Const LOCALE_SABBREVDAYNAME1 = &H31  '  abbreviated name for Monday
Public Const LOCALE_SABBREVDAYNAME2 = &H32  '  abbreviated name for Tuesday
Public Const LOCALE_SABBREVDAYNAME3 = &H33  '  abbreviated name for Wednesday
Public Const LOCALE_SABBREVDAYNAME4 = &H34  '  abbreviated name for Thursday
Public Const LOCALE_SABBREVDAYNAME5 = &H35  '  abbreviated name for Friday
Public Const LOCALE_SABBREVDAYNAME6 = &H36  '  abbreviated name for Saturday
Public Const LOCALE_SABBREVDAYNAME7 = &H37  '  abbreviated name for Sunday
Public Const LOCALE_SMONTHNAME1 = &H38      '  long name for January
Public Const LOCALE_SMONTHNAME2 = &H39      '  long name for February
Public Const LOCALE_SMONTHNAME3 = &H3A      '  long name for March
Public Const LOCALE_SMONTHNAME4 = &H3B      '  long name for April
Public Const LOCALE_SMONTHNAME5 = &H3C      '  long name for May
Public Const LOCALE_SMONTHNAME6 = &H3D      '  long name for June
Public Const LOCALE_SMONTHNAME7 = &H3E      '  long name for July
Public Const LOCALE_SMONTHNAME8 = &H3F      '  long name for August
Public Const LOCALE_SMONTHNAME9 = &H40      '  long name for September
Public Const LOCALE_SMONTHNAME10 = &H41     '  long name for October
Public Const LOCALE_SMONTHNAME11 = &H42     '  long name for November
Public Const LOCALE_SMONTHNAME12 = &H43     '  long name for December
Public Const LOCALE_SABBREVMONTHNAME1 = &H44 '  abbreviated name for January
Public Const LOCALE_SABBREVMONTHNAME2 = &H45 '  abbreviated name for February
Public Const LOCALE_SABBREVMONTHNAME3 = &H46 '  abbreviated name for March
Public Const LOCALE_SABBREVMONTHNAME4 = &H47 '  abbreviated name for April
Public Const LOCALE_SABBREVMONTHNAME5 = &H48 '  abbreviated name for May
Public Const LOCALE_SABBREVMONTHNAME6 = &H49 '  abbreviated name for June
Public Const LOCALE_SABBREVMONTHNAME7 = &H4A '  abbreviated name for July
Public Const LOCALE_SABBREVMONTHNAME8 = &H4B '  abbreviated name for August
Public Const LOCALE_SABBREVMONTHNAME9 = &H4C '  abbreviated name for September
Public Const LOCALE_SABBREVMONTHNAME10 = &H4D '  abbreviated name for October
Public Const LOCALE_SABBREVMONTHNAME11 = &H4E '  abbreviated name for November
Public Const LOCALE_SABBREVMONTHNAME12 = &H4F '  abbreviated name for December
Public Const LOCALE_SABBREVMONTHNAME13 = &H100F

Public Const LOCALE_SYSTEM_DEFAULT& = &H800
Public Const LOCALE_USER_DEFAULT& = &H400

Const cMAXLEN = 255

Private Declare Function apiGetLocaleInfo Lib "kernel32" _
    Alias "GetLocaleInfoA" (ByVal Locale As Long, _
    ByVal LCType As Long, ByVal lpLCData As String, _
    ByVal cchData As Long) As Long


Function fLocaleInfo(lngLCType As Long) As String
Dim lngLocale As Long
Dim strLCData As String, lngData As Long
Dim lngX As Long

    strLCData = String$(cMAXLEN, 0)
    lngData = cMAXLEN - 1
    lngX = apiGetLocaleInfo(LOCALE_USER_DEFAULT, lngLCType, _
                    strLCData, lngData)
    If lngX <> 0 Then
        fLocaleInfo = Left$(strLCData, lngX - 1)
    End If
End Function
' Copy To here
0
 
LVL 12

Expert Comment

by:Trygve
ID: 2202617
Try this:

Copy/Paste the code below into a code module.

Print Nz(fLocaleInfo(LOCALE_SENGLANGUAGE), "")

resulting in Norwegian (Bokmal)

Print Nz(fLocaleInfo(LOCALE_SABBREVLANGNAME), "")

resulting in nor

There are much more settings to be retrieved using this function...
0
 
LVL 12

Expert Comment

by:Trygve
ID: 2202620
Seems it did not like a character from my local languange, hmmm....

See if you can use this function. It is a bit more elegant, it uses the settings from the control panel and it is quite general.
0
 
LVL 1

Author Comment

by:pentapod
ID: 2202689
OK, I'm impressed Tryqve.  That's brilliant.

So how do I split points between the two of you?

....Pentapod
0
 
LVL 12

Expert Comment

by:Trygve
ID: 2202710
The best idea is normally to post a request in the Customer Service area for a point split. The officials will then often award you extra points which you can use for the purpose. The request should include a ref to the question and some words of why you want to split the points.

If you don't do this, you will most likely have to post another question spending "your own" credit points. Go for the request alternative :-))
0
 
LVL 1

Expert Comment

by:psmith789
ID: 2202741
I love the new information, but suggest you watch out for any possible mismatch between the registry locale and the Access language version - I think it's possible to have the Portugese version of Access on a machine with another locale.

Whether this is likely (or important in your case) depends on your situation - if you are sure of a match the registry solution is more elegant and provides much more utility.
0
 
LVL 12

Expert Comment

by:Trygve
ID: 2202957
It is the regional settings that decide how the date is presented to you in Access. I have English Access, but Norwegian regional settings. This means that dates come with Norwegian month names in my applications.
0
 
LVL 1

Author Comment

by:pentapod
ID: 2203154
OK, I will go try the Customer Service area.  Two good answers, limited points, what's a girl to do?

Thx

....Pentapod
0
 
LVL 1

Author Comment

by:pentapod
ID: 2203265
Adjusted points to 150
0
 
LVL 5

Expert Comment

by:ianB
ID: 2206642
Hi,

Pentapod has asked me to split the points on this question, since the question is already locked by psmith789, I will ask pentapod to grade psmith789's answer and close the question, I have posted a question for trygve in this area for his help on the question.

I hope this is satisfactory for everyone concerned.

Any comments or queries, please come to:


http://www.experts-exchange.com/jsp/qShow.jsp?ta=commspt&qid=10232703 

Ian
Community Support @ Experts Exchange
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I have had my own IT business for a very long time. I started mostly with hardware and after about a year started to notice a common theme. I had shelves with software boxes -- Peachtree, Quicken, Sage, Ouickbooks -- and yet most of my clients were…
Instead of error trapping or hard-coding for non-updateable fields when using QODBC, let VBA automatically disable them when forms open. This way, users can view but not change the data. Part 1 explained how to use schema tables to do this. Part 2 h…
In Microsoft Access, learn how to use Dlookup and other domain aggregate functions and one method of specifying a string value within a string. Specify the first argument, which is the expression to be returned: Specify the second argument, which …
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …
Suggested Courses
Course of the Month6 days, 22 hours left to enroll

592 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question