Difference between revisions of "Multilang field"

From EPrints Documentation
Jump to: navigation, search
(Added examples. Improved other sections unhide ToC.)
Line 1: Line 1:
 
{{fieldtypes}}
 
{{fieldtypes}}
__NOTOC__
+
 
 +
 
 +
== Description ==
 +
Allows multiple text values to be recorded representing the same text in different languages.  This is a sub-class of the [[Compound field]] as at least two sub-fields are required.  At least one to store the text and one to store the language (sub-field called <tt>lang</tt>) in which it is written.  By default a Multilang field still sets <tt>multiple => 0</tt> so if more than only one language will be used for any one record then <tt>multiple => 1</tt> also needs to be set.
 +
 
 +
The languages available for the <tt>lang</tt> sub-field are specified in the <tt>cfg/namedsets/languages</tt> file.
 +
 
 
== Inheritance ==
 
== Inheritance ==
 
 
* [[Metadata]]
 
* [[Metadata]]
 
** [[Compound field]]
 
** [[Compound field]]
 
*** [[Multilang field]]
 
*** [[Multilang field]]
 
== Description ==
 
  
 
== Properties ==
 
== Properties ==
 
 
{| border="1" cellpadding="3" cellspacing="0"
 
{| border="1" cellpadding="3" cellspacing="0"
 
| name || default || description  
 
| name || default || description  
Line 17: Line 19:
 
|-
 
|-
 
| '''input_ordered''' || 0 || ''as for [[Metadata]] but with a different default.''
 
| '''input_ordered''' || 0 || ''as for [[Metadata]] but with a different default.''
|-
 
| '''languages''' || undef || ...
 
 
|}
 
|}
  
 
== Required Phrases ==
 
== Required Phrases ==
 +
Rather than needing:
 +
datasetid + "_fieldname_" + fieldname
 +
Multilang fields require the following phrases.  The first directly replaces the original fieldname phrase and the second specifies the language used:
 +
datasetid + "_fieldname_" + fieldname + "_" + subfieldname
 +
datasetid + "_fieldname_" + fieldname + "_lang"
 +
As Multilang fields are compound there may be more than two phrases to add depending on the number of subfields specified.
 +
 +
If you were to change the <tt>title</title> phrase for an eprint to have type <tt>multilang</tt>, you would need the phrases:
 +
eprint_fieldname_title_text
 +
eprint_fieldname_title_lang
 +
 +
If you modify the <tt>cfg/namedsets/languages</tt> file you will need to make sure you add the appropriate additional phrases in the form:
 +
languages_typename_LANGID
 +
E.g. <tt>languages_typename_fr_ca</tt> could be <tt>French Canadian</tt>
 +
 +
== Database ==
 +
Multilang fields do not have a standard way of being stored in the database as they are compound fields.  The <tt>lang</tt> sub-field will appear in the dataset table (or separate table if a <tt>multiple</tt> field) as:
 +
 +
fieldname_lang VARCHAR(16)
 +
 +
== API ==
 +
See [[API:EPrints/MetaField/Multilang|API page]].
 +
 +
== Examples ==
 +
Most basic example.
 +
{
 +
    name => 'title_multilang',
 +
    type => 'multilang',
 +
    fields => [
 +
        {
 +
            sub_name => 'text',
 +
            type => 'text',
 +
        },
 +
    ],
 +
}
 +
Multiple languages for a single record field.
 +
{
 +
    name => 'title_multilang',
 +
    type => 'multilang',
 +
    multiple => 1,
 +
    fields => [
 +
        {
 +
            sub_name => 'text',
 +
            type => 'text',
 +
        },
 +
    ],
 +
}
 +
More than one non-language sub-field.
 +
{
 +
    name => 'question',
 +
    type => 'multilang',
 +
    multiple => 1,
 +
    fields => [
 +
        {
 +
            sub_name => 'question',
 +
            type => 'longtext',
 +
        },
 +
        {
 +
            sub_name => 'answer',
 +
            type => 'text',
 +
        },
 +
    ],
 +
}

Revision as of 10:43, 30 March 2023

EPrints 3 Reference: Directory Structure - Metadata Fields - Repository Configuration - XML Config Files - XML Export Format - EPrints data structure - Core API - Data Objects


Metadata Fields: Arclanguage - Base64 - Bigint - Boolean - Compound - Counter - Dataobjref - Date - Decimal - Email - Fields - Float - Id - Idci - Image - Int - Itemref - Keywords - Langid - Longtext - Longtext_counter - Multilang - Multipart - Name - Namedset - Pagerange - Recaptcha - Recaptcha3 - Relation - Search - Secret - Set - Storable - Subject - Subobject - Text - Time - Timestamp - Url - Uuid


Description

Allows multiple text values to be recorded representing the same text in different languages. This is a sub-class of the Compound field as at least two sub-fields are required. At least one to store the text and one to store the language (sub-field called lang) in which it is written. By default a Multilang field still sets multiple => 0 so if more than only one language will be used for any one record then multiple => 1 also needs to be set.

The languages available for the lang sub-field are specified in the cfg/namedsets/languages file.

Inheritance

Properties

name default description
input_boxes 1 as for Metadata but with a different default.
input_ordered 0 as for Metadata but with a different default.

Required Phrases

Rather than needing:

datasetid + "_fieldname_" + fieldname

Multilang fields require the following phrases. The first directly replaces the original fieldname phrase and the second specifies the language used:

datasetid + "_fieldname_" + fieldname + "_" + subfieldname
datasetid + "_fieldname_" + fieldname + "_lang"

As Multilang fields are compound there may be more than two phrases to add depending on the number of subfields specified.

If you were to change the title</title> phrase for an eprint to have type multilang, you would need the phrases:

eprint_fieldname_title_text
eprint_fieldname_title_lang

If you modify the cfg/namedsets/languages file you will need to make sure you add the appropriate additional phrases in the form:

languages_typename_LANGID

E.g. languages_typename_fr_ca could be French Canadian

Database

Multilang fields do not have a standard way of being stored in the database as they are compound fields. The lang sub-field will appear in the dataset table (or separate table if a multiple field) as:

fieldname_lang VARCHAR(16)

API

See API page.

Examples

Most basic example.

{
    name => 'title_multilang',
    type => 'multilang',
    fields => [
        {
            sub_name => 'text',
            type => 'text',
        },
    ],
}

Multiple languages for a single record field.

{
    name => 'title_multilang',
    type => 'multilang',
    multiple => 1,
    fields => [
        {
            sub_name => 'text',
            type => 'text',
        },
    ],
}

More than one non-language sub-field.

{
    name => 'question',
    type => 'multilang',
    multiple => 1,
    fields => [
        {
            sub_name => 'question',
            type => 'longtext',
        },
        {
            sub_name => 'answer',
            type => 'text',
        },
    ],
}