STANDARD DATA DICTIONARY #.85 -- LANGUAGE FILE                                                                    6/27/25    PAGE 1
STORED IN ^DI(.85,  (534 ENTRIES)   SITE: WWW.BMIRWIN.COM   UCI: VISTA,VISTA                                      (VERSION 22.2)   

DATA          NAME                  GLOBAL        DATA
ELEMENT       TITLE                 LOCATION      TYPE
-----------------------------------------------------------------------------------------------------------------------------------
The LANGUAGE file is used both to officially identify a language, and to store MUMPS code needed to do language-specific
conversions of data such as dates and numbers.  
 
The KIDS build for FileMan 22.2 contains all languages in ISO 639-2:1998(as revised 11/21/2012).  When installed without the KIDS
build, FileMan 22.2 installs 11 languages.  
 
A pointer to this file from the TRANSLATION multiple on the DIALOG file also allows non-English text to be returned via FileMan
calls.  
 
A note to VISTA developers: Although users can select entries by name, software should use the official two or three letter codes
to eliminate mistakes resulting from languages that have similar spelling.  


              DD ACCESS: ^
              WR ACCESS: ^
             DEL ACCESS: ^
           LAYGO ACCESS: ^
IDENTIFIED BY: TWO LETTER CODE (#.02), THREE LETTER CODE (#.03)

PRIMARY KEY:        A (#123)
  Uniqueness Index: B (#1344)
       File, Field: 1) NAME (.85,.01)

SECONDARY KEY:      B (#124)
  Uniqueness Index: D (#1346)
       File, Field: 1) THREE LETTER CODE (.85,.03)

POINTED TO BY: LANGUAGE field (#.001) of the  sub-field (#.007) of the  File (#0) 
               LANGUAGE field (#.001) of the  sub-field (#.008) of the  File (#0) 
               LANGUAGE field (#.001) of the  sub-field (#.009) of the  File (#0) 
               LANGUAGE OF HEADING field (#709.1) of the PRINT TEMPLATE File (#.4) 
               LANGUAGE IN WHICH COMPILED field (#1819.1) of the PRINT TEMPLATE File (#.4) 
               LANGUAGE field (#.01) of the TRANSLATION sub-field (#.847) of the DIALOG File (#.84) 
               LINGUISTIC CATEGORY field (#.08) of the LANGUAGE File (#.85) 
               MEMBER OF LANGUAGE SET field (#.09) of the LANGUAGE File (#.85) 
               LANGUAGE field (#.001) of the  sub-field (#1.008) of the FILE File (#1) 
               LANGUAGE field (#200.07) of the NEW PERSON File (#200) 
               DEFAULT LANGUAGE field (#207) of the KERNEL SYSTEM PARAMETERS File (#8989.3) 
               

CROSS
REFERENCED BY: ALTERNATE NAME(F)

INDEXED BY:    NAME (B), TWO LETTER CODE (C), THREE LETTER CODE (D), ALTERNATE THREE LETTER CODE (E)


    LAST MODIFIED: DEC 18,2023@14:43:27

.85,.001      ID NUMBER                  NUMBER

              INPUT TRANSFORM:  K:+X'=X!(X>9999999999)!(X<1)!(X?.E1"."1.N) X
              LAST EDITED:      OCT 31, 2012 
              HELP-PROMPT:      Type a number between 1 and 9999999999, 0 decimal digits. 
              DESCRIPTION:      A number that is used to uniquely identify a language.  This number corresponds to the Kernel
                                system variable DUZ("LANG"), which is set during Kernel signon to signify which language Fileman
                                should use.  

              TECHNICAL DESCR:  Entries in this file are standardized, with the contents controlled by the Fileman Primary
                                Development Team. The ID Number field is used to help protect referential integrity in VISTA
                                databases during upgrades to the file. ID Number assignment corresponds to the order in which
                                languages were added to the file. They were added in segments.  
                                 
                                The first segment consists of language numbers 1-7, 10-12, and 18, which were the first eleven
                                languages added, in order. English is first because Fileman was originally written in English.
                                German is second because Marcus Werners of Germany led the effort to create Fileman's dialog 
                                framework, to make translating VISTA into other languages easier. Spanish, French, Finnish,
                                Italian, and Portuguese follow in the order in which the Fileman team was approached by potential
                                translators about adding those languages to the file (though Finnish actually predates all other
                                translation efforts except English). Arabic was assigned ID Number 10 instead of 8 in recognition
                                of the debt English owes Arabic for introducing the decimal numbering system to Europe. Russian and
                                Greek were the next two translations the Fileman team was approached about. I do not recall why for
                                Hebrew we skipped ahead to ID Number 18, but I'm sure there was a reason.  
                                 
                                Thereafter, languages are added in segments, in order by Name, starting with ID Number 8. The
                                segments correspond to the ISO 639 language standards, in order (639-1 languages in segment two,
                                639-2 in three, and so on). Each language has one unique record in this file, so wherever a 
                                language in one segment has already been included in an earlier segment, it is not included in the
                                later segment (e.g., Greek was in segment one, so it is not also added as a duplicate in segment
                                two).  
                                 
                                This segmented approach makes it comparatively easy to upgrade the file in discrete batches, to
                                keep the update projects manageable.  


.85,.01       NAME                   0;1 FREE TEXT (Required) (Key field)

              Language-Name   
              INPUT TRANSFORM:  K:$L(X)>60!($L(X)<1) X
              MAXIMUM LENGTH:   60
              LAST EDITED:      OCT 31, 2012 
              HELP-PROMPT:      Answer must be 1-60 characters in length. 
              DESCRIPTION:      Enter the English name of the language, not the native name. 
                                 
                                The default is the English name from ISO 639, converted where necessary to ASCII. Where the ISO 639
                                standards disagree (cf. "Central Khmer" in ISO 639-1 to "Khmer" in ISO 639-3), the most recent
                                standard's spelling is used.  
                                 
                                However, this use of ISO 639's spelling as a default is overridden in several different ways to
                                improve consistency across entries and to reduce selection error.  

              TECHNICAL DESCR:  This is the English name of the language, not the native name. It defaults to the English name from
                                ISO 639, mixed case, converted where necessary to ASCII. Where the ISO 639 standards disagree (cf.
                                "Central Khmer" in ISO 639-1 to "Khmer" in ISO 639-3), the most recent standard's spelling is used.  
                                 
                                However, this use of ISO 639's spelling as a default is overridden in several different ways to
                                improve consistency across entries and to reduce selection error.  
                                 
                                For example, for most modern languages, the form of the name that includes the word "Modern" and
                                the parenthesized dates is an alternate name, but ISO 639 reverses that with Modern Greek. In this
                                file, we reassert the pattern by making the ISO 639 name "Greek, Modern (1453-)" an alternate name
                                and making the name "Greek" instead.  
                                 
                                Since most users of these systems are medical professionals rather than linguists or historians, we
                                emphasize modern languages and group historical ones away from the modern names to reduce
                                accidents. For example, "French, Old (842-ca.1400)" as so named in ISO 639-2 is used as an
                                alternate name for "Old French" in this file, to move the obsolete form of the language away from
                                the modern one. Thus, "Old" languages, "Ancient" ones, and "Middle" ones will tend to sort
                                together. However, languages whose names look like historical ones, such as "Old Church Slavonic",
                                that are still living languages or in active liturgical use are kept in this form if that is how
                                they are best known.  
                                 
                                Also, such forms that include parenthetical dates are changed to remove the dates and parentheses
                                from the Name field; the original forms and variants are preserved in the Alternate Name field.  
                                 
                                For similar reasons, language collections like "Banda languages" are renamed as "Languages, Banda"
                                to move them away from individual language a patient might speak, like "Banda-Banda". The same was
                                preserved from ISO 639 with creoles and pidgins (such as "Creoles and Pidgins, Portuguese-Based"),
                                which are collective languages, to kepp them separate from the individual languages they might be
                                confused with (such as "Portuguese"). However, individual languages like "Haitian Creole" and 
                                "Chinook Jargon" whose ISO 639 names makes them sound like language collections are nevertheless
                                left as is, since these are the names they are known by and since the distinguishing part of the
                                name does come first, allowing for unambiguous selection.  
                                 
                                Where the language name from ISO 639 is a list of alternative names, as in "Catalan, Valencian",
                                the dominant name (based on other code sets, Ethnologue, Wikipedia, e.g. "Catalan") is used as the
                                Name, with the other name(s) (e.g., "Valencian") added to the Alternate Name field.  
                                 
                                As a general rule (except in the case of language collections), ISO 639 names that use commas to
                                invert a language name (like "Sorbian, Upper") are corrected (like "Upper Sorbian"), and the ISO
                                639 name is made an Alternate Name. We do not try to use commas in the Name field to group together
                                all related languages or dialects, though we do in the Alternate Name field.  
                                 
                                In the Name field, parenthetical comments are generally restricted to distinguishing between
                                unrelated languages that have the same name, like "Lele (Democratic Republic of Congo)" and "Lele
                                (Papua New Guinea)". The parenthetical words will be (in order of preference) a country, a people, 
                                or an alternate name of the language, so long as it distinguishes it from the other identically
                                named languages. To date, we have not had to change any of the ISO 639 names we've imported to make
                                or correct these distinctions, but we stand ready to do so to enforce this pattern.  

              FIELD INDEX:      B (#1344)    REGULAR    IR    LOOKUP & SORTING
                   Unique for:  Key A (#123), File #.85
                  Short Descr:  Regular new-style B Index
                    Set Logic:  S ^DI(.85,"B",X,DA)=""
                   Kill Logic:  K ^DI(.85,"B",X,DA)
                   Whole Kill:  K ^DI(.85,"B")
                         X(1):  NAME  (.85,.01)  (Subscr 1)  (forwards)


.85,.02       TWO LETTER CODE        0;2 FREE TEXT

              INPUT TRANSFORM:  K:$L(X)>2!($L(X)<2) X
              MAXIMUM LENGTH:   2
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Answer must be 2 characters in length. 
              DESCRIPTION:      Enter the two-letter code defined for this language in the ISO 639-1 standard. Not every language
                                has a two-letter code; for those that do not leave this field blank.  

              TECHNICAL DESCR:
                                Future versions of this file wil include an optional key on this field.  

              FIELD INDEX:      C (#1345)    REGULAR    IR    LOOKUP & SORTING
                  Short Descr:  Regular new style index on two letter language codes
                    Set Logic:  S ^DI(.85,"C",X,DA)=""
                   Kill Logic:  K ^DI(.85,"C",X,DA)
                   Whole Kill:  K ^DI(.85,"C")
                         X(1):  TWO LETTER CODE  (.85,.02)  (Subscr 1)  (forwards)


.85,.03       THREE LETTER CODE      0;3 FREE TEXT (Key field)

              INPUT TRANSFORM:  K:$L(X)>3!($L(X)<3) X
              MAXIMUM LENGTH:   3
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Answer must be 3 characters in length. 
              DESCRIPTION:
                                Enter the three-letter code defined for this language in the ISO 639-2/B standard.  

              TECHNICAL DESCR:
                                When this file is upgraded to ISO-639-6, an optional key will be added to this field.  

              FIELD INDEX:      D (#1346)    REGULAR    IR    LOOKUP & SORTING
                   Unique for:  Key B (#124), File #.85
                  Short Descr:  Regular new-style index for three letter abbreviations for languages
                    Set Logic:  S ^DI(.85,"D",$E(X,1,30),DA)=""
                   Kill Logic:  K ^DI(.85,"D",$E(X,1,30),DA)
                   Whole Kill:  K ^DI(.85,"D")
                         X(1):  THREE LETTER CODE  (.85,.03)  (Subscr 1)  (Len 30)  (forwards)


.85,.04       FOUR LETTER CODE       0;4 FREE TEXT

              INPUT TRANSFORM:  K:$L(X)>4!($L(X)<4) X
              MAXIMUM LENGTH:   4
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Answer must be 4 characters in length. 
              DESCRIPTION:
                                Enter the four letter code associated with the language in ISO-639-6. 

              TECHNICAL DESCR:  This field is currently not used in this version of the release (as of Fileman V22.2). In a future
                                version when this file is upgraded to ISO-639-6, a key will be added to this field.  


.85,.05       ALTERNATE THREE LETTER CODE 0;5 FREE TEXT

              INPUT TRANSFORM:  K:$L(X)>3!($L(X)<3) X I $D(^DI(.85,"D",X,DA)) D EN^DDIOL("Three letter code already exists!") K X
              MAXIMUM LENGTH:   3
              LAST EDITED:      AUG 01, 2023 
              HELP-PROMPT:      Enter the alternate three letter code, 3 characters in length. 
              DESCRIPTION:      This is the alternate three letter code for a language. This will only be used in cases where the
                                language abbreviation is different in English than in the native language. E.g. GER instead of DEU;
                                for German instead of Deutsch. This alternate abbreviation can be found in ISO 639-2/B.  

              TECHNICAL DESCR:
                                In a future version of Fileman, this field will have an optional key.  

              NOTES:            XXXX--CAN'T BE ALTERED EXCEPT BY PROGRAMMER

              FIELD INDEX:      E (#1347)    MUMPS    IR    LOOKUP & SORTING
                  Short Descr:  (Pseudo-)Mnemonic index for the Alternate three letter code
                  Description:  This will add entries to the D index for the three letter code a la the mnemonic style.  
                                 
                                If you need re-cross-reference this field, you need to kill of the entries in the regular D index,
                                set the D index, and then set this index to update the D with the mnemonic xrefs.  
                    Set Logic:  S ^DI(.85,"D",X,DA)=1
                   Kill Logic:  K ^DI(.85,"D",X,DA)
                         X(1):  ALTERNATE THREE LETTER CODE  (.85,.05)  (Subscr 1)  (forwards)


.85,.06       SCOPE                  0;6 SET

                                'I' FOR Individual; 
                                'M' FOR Macrolanguage; 
                                'C' FOR Collective; 
                                'S' FOR Special; 
                                'L' FOR Local; 
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Select a language's scope 
              DESCRIPTION:      Enter the Scope of a Language.  
                                 
                                Individual if the language is an individually identifiable language (e.g. 'Cantonese').  
                                 
                                Macrolanguage if the language encopasses several other languages (e.g. 'Chinese') 
                                 
                                Collective if the language is a language group (e.g. 'Languages, Sino-Tibetan') 
                                 
                                Special and Local are reserved for specific entries.  


.85,.07       TYPE                   0;7 SET

              Historical Status   
                                'L' FOR Living; 
                                'C' FOR Constructed; 
                                'A' FOR Ancient; 
                                'H' FOR Historical; 
                                'E' FOR Extinct; 
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Select a choice. 
              DESCRIPTION:      Living means that the language is spoken today (e.g. English).  
                                 
                                Constructed means that the language is artificial (e.g. Esperanto).  
                                 
                                Ancient means that the language is very old and not spoken any more (e.g.  Ancient Egyptian).  
                                 
                                Historical means that the language was being used in the Medieval times and is not spoken any more
                                (e.g. Old High German).  
                                 
                                Extinct means that the language was being used recently but has died out (e.g. Cornish).  


.85,.08       LINGUISTIC CATEGORY    0;8 POINTER TO LANGUAGE FILE (#.85)

              INPUT TRANSFORM:  S DIC("S")="I $P(^(0),U,6)=""C""" D ^DIC K DIC S DIC=$G(DIE),X=+Y K:Y<0 X
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Select a choice. 
              DESCRIPTION:
                                Enter a language collection to which this language belongs.  

              TECHNICAL DESCR:
                                The current version of this file does not distribute data for this field.  

              SCREEN:           S DIC("S")="I $P(^(0),U,6)=""C"""
              EXPLANATION:      Only collective languages are selectable

.85,.09       MEMBER OF LANGUAGE SET 0;9 POINTER TO LANGUAGE FILE (#.85)

              INPUT TRANSFORM:  S DIC("S")="I $P(^(0),U,6)=""M""" D ^DIC K DIC S DIC=$G(DIE),X=+Y K:Y<0 X
              LAST EDITED:      NOV 01, 2012 
              HELP-PROMPT:      Enter a choice. 
              DESCRIPTION:      If this language is a dialect of a macrolanguage, select the macrolanguage to which it belongs.
                                (E.g. Cantonese is a dialect of Chinese; thus Chinese is Cantonese's macrolanguage.) 

              TECHNICAL DESCR:
                                The current version of this file does not distribute data for this field.  

              SCREEN:           S DIC("S")="I $P(^(0),U,6)=""M"""
              EXPLANATION:      You may only select Macrolanguages

.85,1         ALTERNATE NAME         1;0 Multiple #.8501

              DESCRIPTION:
                                This multiple contains other names by which the language in this entry is known.  


.8501,.01       ALTERNATE NAME         0;1 FREE TEXT (Multiply asked)

                INPUT TRANSFORM:  K:$L(X)>60!($L(X)<1) X
                MAXIMUM LENGTH:   60
                LAST EDITED:      NOV 01, 2012 
                HELP-PROMPT:      Answer must be 1-60 characters in length. 
                DESCRIPTION:      This field contains other synonyms for a language.  E.g. for Greek, synonyms include Ellinika and
                                  Romaic.  

                CROSS-REFERENCE:  .8501^B 
                                  1)= S ^DI(.85,DA(1),1,"B",$E(X,1,30),DA)=""
                                  2)= K ^DI(.85,DA(1),1,"B",$E(X,1,30),DA)

                CROSS-REFERENCE:  .85^F 
                                  1)= S ^DI(.85,"F",$E(X,1,30),DA(1),DA)=""
                                  2)= K ^DI(.85,"F",$E(X,1,30),DA(1),DA)
                                  3)= WHOLE FILE CROSS REFERENCE FOR ALTERNATE NAME
                                  Whole file cross-reference for ALTERNATE NAME multiple.  





.85,10        DESCRIPTION            10;0   WORD-PROCESSING #.8502   (IGNORE "|")

              LAST EDITED:      OCT 31, 2012 

                LAST EDITED:      OCT 31, 2012 
                HELP-PROMPT:      Enter free text data.  Items within '|' will NOT be evaluated. 
                DESCRIPTION:
                                  An optional description of the language can be entered.  




.85,10.1      ORDINAL NUMBER FORMAT  ORD;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      MAR 07, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              DESCRIPTION:      MUMPS code used to transfer a number in Y to its ordinal equivalent in this language. The code
                                should set Y to the ordinal equivalent without altering any other variables in the environment. 
                                Ex. in English: 
                                       Y=1     becomes         Y=1ST 
                                       Y=2     becomes         Y=2ND 
                                       Y=3     becomes         Y=3RD  etc.  

              WRITE AUTHORITY:  @

.85,10.2      DATE/TIME FORMAT       DD;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      MAR 07, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              DESCRIPTION:      MUMPS code used to transfer a date or date/time in Y from FileMan internal format, to printable
                                format equivalent to English MMM DD,YYYY@HH.MM.SS.  The code should set Y to the output, without
                                altering any other variables in the environment.  Ex. in English: 
                                 
                                       Y=2940612.031245        becomes         Y=JUN 12,1994@03:12:45 

              WRITE AUTHORITY:  @

.85,10.21     DATE/TIME FORMAT (FMTE) FMTE;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      JUN 24, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              DESCRIPTION:      MUMPS code used to transfer a date or date/time in Y from FileMan internal format, to printable
                                format based on the various outputs from routine FMTE^DILIBF.  This is an extrinsic function. 
                                Coming in to this MUMPS code, in addition to the internal date in Y, a third parameter will be 
                                defined to contain flags equivalent to the flag passed as the second input parameter to
                                FMTE^DILIBF. The code should set Y to the output, without altering any other variables in the
                                environment.  The output should be formatted based on these flags: 
                                 
                                 1    MMM DD, YYYY@HH:MM:SS 
                                 2    MM/DD/YY@HH:MM:SS     no leading zeroes on month,day 
                                 3    DD/MM/YY@HH:MM:SS     no leading zeroes on month,day 
                                 4    YY/MM/DD@HH:MM:SS 
                                 5    MMM DD,YYYY@HH:MM:SS  no space before year,no leading zero on day 
                                 6    MM-DD-YYYY @ HH:MM:SS spaces separate time 
                                 7    MM-DD-YYYY@HH:MM:SS   no leading zeroes on month,day 
                                 
                                letters in the flag 
                                 S    return always seconds 
                                 U    return uppercase month names 
                                 P    return time as am,pm 
                                 D    return only date part 

              WRITE AUTHORITY:  @

.85,10.22     TIME                   TIME;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      MAR 18, 1996 
              HELP-PROMPT:      This is Standard MUMPS code for the output of time only. 
              DESCRIPTION:      The code stored here will be used to get formatted output of the time part belonging to a FileMan
                                Date/Time value.  

              WRITE AUTHORITY:  @

.85,10.3      CARDINAL NUMBER FORMAT CRD;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      MAR 08, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              DESCRIPTION:      MUMPS code used to transfer a number in Y to its cardinal equivalent in this language. The code
                                should set Y to the cardinal equivalent without altering any other variables in the environment. 
                                Ex. in English: 
                                       Y=2000     becomes         Y=2,000 
                                       Y=1234567  becomes         Y=1,234,567 

              WRITE AUTHORITY:  @

.85,10.4      UPPERCASE CONVERSION   UC;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      MAR 08, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              DESCRIPTION:      MUMPS code used to convert text in Y to its upper-case equivalent in this language. The code should
                                set Y to the external format without altering any other variables in the environment.  In English,
                                changes 
                                   abCdeF      to: ABCDEF 

              WRITE AUTHORITY:  @

.85,10.5      LOWERCASE CONVERSION   LC;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      MAR 08, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              DESCRIPTION:      MUMPS code used to convert text in Y to its lower-case equivalent in  this language. The code
                                should set Y to the external format without altering any other variables in the environment.  In
                                English, changes: 
                                    ABcdEFgHij         to:  abcdefghij 

              WRITE AUTHORITY:  @

.85,20.2      DATE INPUT             20.2;E1,245 MUMPS

              INPUT TRANSFORM:  K:$L(X)>245 X D:$D(X) ^DIM
              LAST EDITED:      JUL 14, 1994 
              HELP-PROMPT:      This is Standard MUMPS code. 
              WRITE AUTHORITY:  @


      FILES POINTED TO                      FIELDS

LANGUAGE (#.85)                   LINGUISTIC CATEGORY (#.08)
                                  MEMBER OF LANGUAGE SET (#.09)



INPUT TEMPLATE(S):

PRINT TEMPLATE(S):

SORT TEMPLATE(S):

FORM(S)/BLOCK(S):