LRM resx Support

From Lingoport Wiki
Revision as of 21:03, 31 August 2017 by Llawson (talk | contribs) (Sample LRM Project Definition File for .resx)
Jump to: navigation, search

The .resx resource file format consists of XML entries, which specify objects and strings inside XML tags. LRM supports .resx files. See https://msdn.microsoft.com/en-us/library/ekyft91f(v=vs.100).aspx .

Locale File Extensions

  • The resx files follow this naming convention: filename.<language>.resx or filename.<language>-<country>.resx. For example, resources.resx or resources.en.resx for a base file, resources.fr.resx or resources.fr-FR.resx, etc.
  • If you can, avoid duplicate file names. Duplications incur more prep kits than necessary.

What is resx files encoding?

.Net resx files must be UTF-8 encoded, as per the resx schema, Hence, on-boarding resx resource files with LRM must specify the UTF-8 encoding:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="data">
     <xsd:complexType>
           <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0"
                    msdata:Ordinal="2" />
            </xsd:sequence>
                <xsd:attribute name="name" type="xsd:string" />
                <xsd:attribute name="type" type="xsd:string" />
                <xsd:attribute name="mimetype" type="xsd:string" />
      </xsd:complexType>
</xsd:element>

Example of .resx Files

  <?xml version="1.0" encoding="UTF-8"?>
  <root>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
        <xsd:element msdata:IsDataSet="true" name="root">
            <xsd:complexType>
                <xsd:choice maxOccurs="unbounded">
                    <xsd:element name="data">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element minOccurs="0" msdata:Ordinal="1" name="value" type="xsd:string" />
                                <xsd:element minOccurs="0" msdata:Ordinal="2" name="comment" type="xsd:string" />
                            </xsd:sequence>
                            <xsd:attribute msdata:Ordinal="1" name="name" type="xsd:string" />
                            <xsd:attribute msdata:Ordinal="3" name="type" type="xsd:string" />
                            <xsd:attribute msdata:Ordinal="4" name="mimetype" type="xsd:string" />
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="resheader">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element minOccurs="0" msdata:Ordinal="1" name="value" type="xsd:string" />
                            </xsd:sequence>
                            <xsd:attribute name="name" type="xsd:string" use="required" />
                        </xsd:complexType>
                    </xsd:element>
                </xsd:choice>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
    </resheader>
    <resheader name="version">
        <value>1.3</value>
    </resheader>
    <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <data name="CARO_CAROPTI_100" xml:space="preserve"><value>Car Option</value></data>
    <data name="COMM_THISSHO_1" xml:space="preserve"><value>this should be detected</value></data>
  </root>

Sample LRM Project Definition File for .resx

 <?xml version="1.0" encoding="UTF-8"?>
 <lrmconf>
  <model-version>1.0.0</model-version>
  <project-name>WinApp</project-name>
       <project-desc>Lingoport.WinApp is configured to support resx resource files</project-desc>
 <group-name>Lingoport</group-name>
 <top-level-dir>/var/lib/jenkins/jobs/Lingoport.WinApp/workspace</top-level-dir>
 <detect-errors>
   <missed-trans-error>1</missed-trans-error>
   <parameter-mismatch-error>1</parameter-mismatch-error>
 </detect-errors>
 <track-back-locale>br</track-back-locale>
 <pseudo-locale>eo</pseudo-locale>
 <target-locales>
   <locale>de</locale>
   <locale>fr</locale>
   <locale>ja</locale>
 </target-locales>
 <default-locale>en_US</default-locale>
 <resource-extensions>
    <resource-extension>
     <!-- parser-type not needed since .resx is a standard LRM extension that maps to the xml parser type -->
     <extension>resx</extension>
     <file-name-pattern>*.l-c-v</file-name-pattern>
     <use-pattern-on-dflt-locale>0</use-pattern-on-dflt-locale>                
     <file-location-pattern></file-location-pattern>
     <use-location-pattern-on-dflt-locale>0</use-location-pattern-on-dflt-locale>
     <base-file-encoding>UTF-8</base-file-encoding>
     <localized-file-encoding>UTF-8</localized-file-encoding>
     <parameter-regex-pattern><![CDATA[%[ds]|%\d+\$[ds]|%\{\w+\}]]></parameter-regex-pattern>
   </resource-extension>
   <resource-extension>
     <!-- parser-type is required because .myext is not a standard LRM extension -->
     <extension>myext</extension>
     <parser-type>xml</parser-type>
     <file-name-pattern>*.l-c-v</file-name-pattern>
     <use-pattern-on-dflt-locale>0</use-pattern-on-dflt-locale>                
     <file-location-pattern></file-location-pattern>
     <use-location-pattern-on-dflt-locale>0</use-location-pattern-on-dflt-locale>
     <base-file-encoding>UTF-8</base-file-encoding>
     <localized-file-encoding>UTF-8</localized-file-encoding>
     <parameter-regex-pattern><![CDATA[%[ds]|%\d+\$[ds]|%\{\w+\}]]></parameter-regex-pattern>
   </resource-extension>
 </resource-extensions>
 <dirset>
   <includes>
     <include-dir>**/**</include-dir>
   </includes>
    <excludes>
     <exclude-dir-file>**/source/bin/**</exclude-dir-file>
   </excludes>
 </dirset>
 </lrmconf>