summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZolnai Tamás <zolnaitamas2000@gmail.com>2012-09-10 20:31:38 +0200
committerMichael Stahl <mstahl@redhat.com>2012-09-20 18:46:11 +0000
commit161f4ac95ae3df1daaede762862ea1c3ac4bb399 (patch)
tree10a13b0c1347a0222493cced74c42c4bd383b6ff
parent42a2fb1c24750dde53b737d1fb45e2bb7286a3f2 (diff)
Use po file for merge 1. step
Make executables to waiting for po as input Add some function to po files Rewrite makefiles to use po files for merge Change KeyId generator not to use xml special charachters One filetype remain: properties Change-Id: If2bd2ae7afc61518c2d838a3cae301ef62dd9761 Reviewed-on: https://gerrit.libreoffice.org/593 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--l10ntools/Executable_cfgex.mk1
-rw-r--r--l10ntools/Executable_helpex.mk1
-rw-r--r--l10ntools/Executable_transex3.mk1
-rw-r--r--l10ntools/Executable_ulfex.mk1
-rw-r--r--l10ntools/Executable_xrmex.mk1
-rw-r--r--l10ntools/inc/po.hxx18
-rw-r--r--l10ntools/source/merge.cxx108
-rw-r--r--l10ntools/source/po.cxx175
-rw-r--r--l10ntools/source/renewpo.cxx6
-rw-r--r--solenv/gbuild/AllLangResTarget.mk22
-rw-r--r--solenv/gbuild/Configuration.mk19
-rw-r--r--solenv/gbuild/ExtensionTarget.mk31
-rw-r--r--solenv/gbuild/InstallModuleTarget.mk11
-rw-r--r--solenv/gbuild/TargetLocations.mk2
-rw-r--r--solenv/inc/rules.mk12
15 files changed, 299 insertions, 110 deletions
diff --git a/l10ntools/Executable_cfgex.mk b/l10ntools/Executable_cfgex.mk
index 7dc23275da14..9fea979482bc 100644
--- a/l10ntools/Executable_cfgex.mk
+++ b/l10ntools/Executable_cfgex.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Executable_set_include,cfgex,\
$(eval $(call gb_Executable_use_libraries,cfgex,\
sal \
+ i18nregexp \
))
$(eval $(call gb_Executable_add_scanners,cfgex,\
diff --git a/l10ntools/Executable_helpex.mk b/l10ntools/Executable_helpex.mk
index 470bd4c89d2c..3569dffb5156 100644
--- a/l10ntools/Executable_helpex.mk
+++ b/l10ntools/Executable_helpex.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Executable_set_include,helpex,\
$(eval $(call gb_Executable_use_libraries,helpex,\
sal \
+ i18nregexp \
))
$(eval $(call gb_Executable_use_external,helpex,expat_utf8))
diff --git a/l10ntools/Executable_transex3.mk b/l10ntools/Executable_transex3.mk
index bc9a85272d9f..2d9590641d83 100644
--- a/l10ntools/Executable_transex3.mk
+++ b/l10ntools/Executable_transex3.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Executable_set_include,transex3,\
$(eval $(call gb_Executable_use_libraries,transex3,\
sal \
+ i18nregexp \
))
$(eval $(call gb_Executable_add_scanners,transex3,\
diff --git a/l10ntools/Executable_ulfex.mk b/l10ntools/Executable_ulfex.mk
index e82c9b8ee812..f3fd559ac4f7 100644
--- a/l10ntools/Executable_ulfex.mk
+++ b/l10ntools/Executable_ulfex.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Executable_set_include,ulfex,\
$(eval $(call gb_Executable_use_libraries,ulfex,\
sal \
+ i18nregexp \
))
$(eval $(call gb_Executable_use_static_libraries,ulfex,\
diff --git a/l10ntools/Executable_xrmex.mk b/l10ntools/Executable_xrmex.mk
index 33255f4eb7e1..b86dbc4b80d2 100644
--- a/l10ntools/Executable_xrmex.mk
+++ b/l10ntools/Executable_xrmex.mk
@@ -33,6 +33,7 @@ $(eval $(call gb_Executable_set_include,xrmex,\
$(eval $(call gb_Executable_use_libraries,xrmex,\
sal \
+ i18nregexp \
))
$(eval $(call gb_Executable_add_scanners,xrmex,\
diff --git a/l10ntools/inc/po.hxx b/l10ntools/inc/po.hxx
index b4b18c49d980..81bafe7b7f10 100644
--- a/l10ntools/inc/po.hxx
+++ b/l10ntools/inc/po.hxx
@@ -25,6 +25,7 @@ private:
OString m_sUnTransStr;
OString m_sTransStr;
bool m_bFuzzy;
+ bool m_bNull;
OString m_sKeyId;
public:
@@ -38,6 +39,8 @@ public:
virtual OString getUnTransStr() const { return m_sUnTransStr; }
virtual OString getTransStr() const { return m_sTransStr; }
virtual bool getFuzzy() const { return m_bFuzzy; }
+ virtual bool isNull() const { return m_bNull; }
+ virtual OString getKeyId() const { return m_sKeyId; }
virtual void setWhiteSpace(const OString& rWhiteSpace);
virtual void setExtractCom(const OString& rExtractCom);
@@ -68,6 +71,8 @@ private:
OString m_sResourceType;
TYPE m_eType;
OString m_sHelpText;
+
+ void SetMembers();
public:
PoEntry();
@@ -84,6 +89,8 @@ public:
OString getUnTransStr() const;
OString getTransStr() const;
bool getFuzzy() const { return m_aGenPo.getFuzzy(); }
+ bool isNull() const { return m_aGenPo.isNull(); }
+ OString getKeyId() const { return m_aGenPo.getKeyId(); }
void setUnTransStr(const OString& rUnTransStr);
void setTransStr(const OString& rTransStr);
void setFuzzy(const bool bFuzzy);
@@ -91,6 +98,8 @@ public:
void writeToFile(std::ofstream& rOFStream);
void readFromFile(std::ifstream& rIFStream);
+ static bool IsInSameComp(const PoEntry& rPo1,const PoEntry& rPo2);
+
};
class PoHeader
@@ -105,18 +114,23 @@ private:
OString m_sPoRevisionDate;
OString m_sLastTranslator;
OString m_sLanguageTeam;
+ OString m_sLanguage;
OString m_sMimeVersion;
- OString m_sPluralForms;
OString m_sContentType;
- OString m_sCharset;
OString m_sEncoding;
+ OString m_sPluralForms;
OString m_sXGenerator;
OString m_sXAcceleratorMarker;
+ void SetMembers();
public:
+ PoHeader();
PoHeader( const OString& rExtSrc );
~PoHeader();
+
+ OString getLanguage() const { return m_sLanguage; }
void writeToFile(std::ofstream& rOFStream);
+ void readFromFile(std::ifstream& rIFStream);
};
#endif // _PO_INCLUDED
diff --git a/l10ntools/source/merge.cxx b/l10ntools/source/merge.cxx
index 5da52c57d640..a1c4570056e6 100644
--- a/l10ntools/source/merge.cxx
+++ b/l10ntools/source/merge.cxx
@@ -34,6 +34,7 @@
#include <vector>
#include "export.hxx"
+#include "po.hxx"
namespace
{
@@ -142,42 +143,95 @@ MergeDataFile::MergeDataFile(
bool bCaseSensitive)
{
std::ifstream aInputStream(rFileName.getStr());
- const ::rtl::OString sHACK(RTL_CONSTASCII_STRINGPARAM("HACK"));
- const ::rtl::OString sFileNormalized(lcl_NormalizeFilename(rFile));
- const bool isFileEmpty = !sFileNormalized.isEmpty();
-
if (!aInputStream.is_open())
{
- printf("Warning : Can't open %s\n", rFileName.getStr());
+ printf("Warning : Can't open po path container file");
return;
}
- while (!aInputStream.eof())
+ std::string sPoFileName;
+ aInputStream >> sPoFileName;
+ bool bFirstLang = true;
+ while(!aInputStream.eof())
{
- std::string buf;
- std::getline(aInputStream, buf);
- rtl::OString sLine(buf.data(), buf.length());
- sal_Int32 n = 0;
- // Skip all wrong filenames
- const ::rtl::OString filename = lcl_NormalizeFilename(sLine.getToken(1, '\t', n)); // token 1
- if(isFileEmpty || sFileNormalized.equals("") || (!isFileEmpty && filename.equals(sFileNormalized)) )
+ std::ifstream aPoFile(sPoFileName.c_str());
+ const OString sHACK("HACK");
+ const OString sFileName(lcl_NormalizeFilename(rFile));
+
+ if (!aPoFile.is_open())
{
- const rtl::OString sTYP = sLine.getToken( 1, '\t', n ); // token 3
- const rtl::OString sGID = sLine.getToken( 0, '\t', n ); // token 4
- const rtl::OString sLID = sLine.getToken( 0, '\t', n ); // token 5
- rtl::OString sPFO = sLine.getToken( 1, '\t', n ); // token 7
- sPFO = sHACK;
- rtl::OString nLANG = sLine.getToken( 1, '\t', n ); // token 9
- nLANG = nLANG.trim();
- const rtl::OString sTEXT = sLine.getToken( 0, '\t', n ); // token 10
- const rtl::OString sQHTEXT = sLine.getToken( 1, '\t', n ); // token 12
- const rtl::OString sTITLE = sLine.getToken( 0, '\t', n ); // token 13
-
- if (!nLANG.equalsIgnoreAsciiCaseL(RTL_CONSTASCII_STRINGPARAM("en-US")))
+ printf("Warning : Can't open %s\n", sPoFileName.c_str());
+ return;
+ }
+
+ PoHeader aPoHeader;
+ aPoHeader.readFromFile(aPoFile);
+ const OString nLANG = aPoHeader.getLanguage();
+ aLanguageSet.insert(nLANG);
+ PoEntry aNextPo;
+ do
+ {
+ aNextPo.readFromFile(aPoFile);
+ } while( !aNextPo.isNull() && aNextPo.getSourceFile() != sFileName );
+ while( !aNextPo.isNull() && aNextPo.getSourceFile() == sFileName )
+ {
+ PoEntry aActPo(aNextPo);
+
+ bool bInSameComp = false;
+ OString sText;
+ OString sQHText;
+ OString sTitle;
+ OString sExText;
+ OString sExQHText;
+ OString sExTitle;
+ OString sQTZText;
+ OString sQTZQHText;
+ OString sQTZTitle;
+ do
+ {
+ if( bInSameComp )
+ aActPo = PoEntry(aNextPo);
+ OString sTemp = aActPo.getTransStr();
+ if( aActPo.getFuzzy() || sTemp.isEmpty() )
+ sTemp = aActPo.getUnTransStr();
+ switch( aActPo.getType() )
+ {
+ case PoEntry::TTEXT:
+ sText = sTemp;
+ sExText = aActPo.getUnTransStr();
+ sQTZText = aActPo.getKeyId();
+ break;
+ case PoEntry::TQUICKHELPTEXT:
+ sQHText = sTemp;
+ sExQHText = aActPo.getUnTransStr();
+ sQTZQHText = aActPo.getKeyId();
+ break;
+ case PoEntry::TTITLE:
+ sTitle = sTemp;
+ sExTitle = aActPo.getUnTransStr();
+ sQTZTitle = aActPo.getKeyId();
+ break;
+ }
+ aNextPo.readFromFile(aPoFile);
+ } while(!aNextPo.isNull() &&
+ (bInSameComp = PoEntry::IsInSameComp(aActPo,aNextPo)));
+
+ InsertEntry( aActPo.getResourceType(), aActPo.getGroupId(),
+ aActPo.getLocalId(), sHACK, nLANG, sText,
+ sQHText, sTitle, sFileName, bCaseSensitive );
+ if( bFirstLang )
{
- aLanguageSet.insert(nLANG);
- InsertEntry( sTYP, sGID, sLID, sPFO, nLANG, sTEXT, sQHTEXT, sTITLE, filename, bCaseSensitive );
+ aLanguageSet.insert("qtz");
+ InsertEntry( aActPo.getResourceType(), aActPo.getGroupId(),
+ aActPo.getLocalId(), sHACK, "qtz",
+ sQTZText + "‖" + sExText,
+ sQTZQHText + "‖" + sExQHText,
+ sQTZTitle + "‖" + sExTitle,
+ sFileName, bCaseSensitive );
}
}
+ aPoFile.close();
+ aInputStream >> sPoFileName;
+ bFirstLang = false;
}
aInputStream.close();
}
diff --git a/l10ntools/source/po.cxx b/l10ntools/source/po.cxx
index 1a7c5aead7df..3be13fcc7361 100644
--- a/l10ntools/source/po.cxx
+++ b/l10ntools/source/po.cxx
@@ -32,11 +32,12 @@ OString ImplGenKeyId(const OString& rGenerator)
boost::crc_32_type aCRC32;
aCRC32.process_bytes(rGenerator.getStr(), rGenerator.getLength());
sal_uInt32 nCRC = aCRC32.checksum();
+ //Use all readable ASCII charachter exclude xml special tags: ",',&,<,>
+ const OString sSymbols = "!#$%()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
char sKeyId[5];
- for(int nIndex = 0; nIndex < 4; ++nIndex)
+ for( short nKeyInd = 0; nKeyInd < 4; ++nKeyInd )
{
- //Get a char from the [33,126] interval of ASCII
- sKeyId[nIndex] = static_cast<char>((nCRC & 255) % 93 + 33);
+ sKeyId[nKeyInd] = sSymbols[(nCRC & 255) % 89];
nCRC >>= 8;
}
sKeyId[4] = '\0';
@@ -109,7 +110,7 @@ OString ImplGenNormString(const OString& rString)
//Decide whether a string starts with an other string
bool ImplStartsWith(const OString& rString,const OString& rStart)
{
- return rString.copy(0,rStart.getLength())==rStart;
+ return rString.match(rStart);
}
//Default constructor
@@ -121,6 +122,7 @@ GenPoEntry::GenPoEntry()
, m_sUnTransStr( OString() )
, m_sTransStr( OString() )
, m_bFuzzy( false )
+ , m_bNull( false )
, m_sKeyId( OString() )
{
}
@@ -197,6 +199,12 @@ void GenPoEntry::writeToFile(std::ofstream& rOFStream)
//Read from file
void GenPoEntry::readFromFile(std::ifstream& rIFStream)
{
+ *this = GenPoEntry();
+ if( rIFStream.eof() )
+ {
+ m_bNull = true;
+ return;
+ }
m_sWhiteSpace = "\n";
OString* pLastMsg = 0;
std::string sTemp;
@@ -412,6 +420,34 @@ PoEntry::~PoEntry()
{
}
+//Set members on the basis of m_aGenPo
+void PoEntry::SetMembers()
+{
+ if( !m_aGenPo.isNull() )
+ {
+ m_sSourceFile = m_aGenPo.getReference();
+ OString sContext = m_aGenPo.getContext();
+ m_sGroupId = sContext.getToken(0,'\n');
+
+ if (sContext.indexOf('\n')==sContext.lastIndexOf('\n'))
+ m_sResourceType = sContext.getToken(1,'\n').getToken(0,'.');
+ else
+ {
+ m_sLocalId = sContext.getToken(1,'\n');
+ m_sResourceType = sContext.getToken(2,'\n').getToken(0,'.');
+ }
+ if (sContext.endsWith(".text"))
+ m_eType = TTEXT;
+ else if (sContext.endsWith(".quickhelptext"))
+ m_eType = TQUICKHELPTEXT;
+ else if (sContext.endsWith(".title"))
+ m_eType = TTITLE;
+ else{
+ throw;}
+ m_sHelpText = m_aGenPo.getExtractCom();
+ }
+}
+
//Get translation string in sdf/merge format
OString PoEntry::getUnTransStr() const
{
@@ -478,29 +514,18 @@ void PoEntry::writeToFile(std::ofstream& rOFStream)
//Read from file
void PoEntry::readFromFile(std::ifstream& rIFStream)
{
+ *this = PoEntry();
m_aGenPo.readFromFile(rIFStream);
- m_sSourceFile = m_aGenPo.getReference();
-
- OString sContext = m_aGenPo.getContext();
- m_sGroupId = sContext.getToken(0,'\n');
-
- if (sContext.indexOf('\n')==sContext.lastIndexOf('\n'))
- m_sResourceType = sContext.getToken(1,'\n').getToken(0,'.');
- else
- {
- m_sLocalId = sContext.getToken(1,'\n');
- m_sResourceType = sContext.getToken(2,'\n').getToken(0,'.');
- }
- if (sContext.endsWith(".text"))
- m_eType = TTEXT;
- else if (sContext.endsWith(".quickhelptext"))
- m_eType = TQUICKHELPTEXT;
- else if (sContext.endsWith(".title"))
- m_eType = TTITLE;
- else
- throw;
+ SetMembers();
+}
- m_sHelpText = m_aGenPo.getExtractCom();
+//Check whether po-s belong to the same localization component
+bool PoEntry::IsInSameComp(const PoEntry& rPo1,const PoEntry& rPo2)
+{
+ return ( rPo1.m_sSourceFile == rPo2.m_sSourceFile &&
+ rPo1.m_sGroupId == rPo2.m_sGroupId &&
+ rPo1.m_sLocalId == rPo2.m_sLocalId &&
+ rPo1.m_sResourceType == rPo2.m_sResourceType );
}
//Class PoHeader
@@ -515,7 +540,35 @@ OString ImplGetTime()
return pBuff;
}
-//Constructor
+//Get relevant part of actual token
+OString ImplGetElement(const OString& rText, const sal_Int32 nToken)
+{
+ OString sToken = rText.getToken(nToken,'\n');
+ sal_Int32 nFirstIndex = sToken.indexOf(':') + 2;
+ return sToken.copy( nFirstIndex,sToken.getLength()-nFirstIndex );
+}
+
+//Default Constructor
+PoHeader::PoHeader()
+ : m_aGenPo( GenPoEntry() )
+ , m_sExtractionSource( OString() )
+ , m_sProjectIdVersion( OString() )
+ , m_sReportMsgidBugsTo( OString() )
+ , m_sPotCreationDate( OString() )
+ , m_sPoRevisionDate( OString() )
+ , m_sLastTranslator( OString() )
+ , m_sLanguageTeam( OString() )
+ , m_sLanguage( OString() )
+ , m_sMimeVersion( OString() )
+ , m_sContentType( OString() )
+ , m_sEncoding( OString() )
+ , m_sPluralForms( OString() )
+ , m_sXGenerator( OString() )
+ , m_sXAcceleratorMarker( OString() )
+{
+}
+
+//Template Constructor
PoHeader::PoHeader( const OString& rExtSrc )
: m_aGenPo( GenPoEntry() )
, m_sExtractionSource( rExtSrc )
@@ -527,36 +580,74 @@ PoHeader::PoHeader( const OString& rExtSrc )
, m_sPoRevisionDate( "YEAR-MO-DA HO:MI+ZONE" )
, m_sLastTranslator( "FULL NAME <EMAIL@ADDRESS>" )
, m_sLanguageTeam( "LANGUAGE <LL@li.org>" )
+ , m_sLanguage( OString() )
, m_sMimeVersion( "1.0" )
- , m_sContentType( "text/plain" )
- , m_sCharset( "UTF-8" )
+ , m_sContentType( "text/plain; charset=UTF-8" )
, m_sEncoding( "8bit" )
+ , m_sPluralForms( OString() )
, m_sXGenerator( "LibreOffice" )
, m_sXAcceleratorMarker( "~" )
{
- m_aGenPo.setExtractCom("extracted from " + rExtSrc);
- m_aGenPo.setTransStr(
- "Project-Id-Version: " + m_sProjectIdVersion + "\n" +
- "Report-Msgid-Bugs-To: " + m_sReportMsgidBugsTo + "\n" +
- "POT-Creation-Date: " + m_sPotCreationDate + "\n" +
- "PO-Revision-Date: " + m_sPoRevisionDate + "\n" +
- "Last-Translator: " + m_sLastTranslator + "\n" +
- "Language-Team: " + m_sLanguageTeam + "\n" +
- "MIME-Version: " + m_sMimeVersion + "\n" +
- "Content-Type: " + m_sContentType + "; " +
- "charset=" + m_sCharset + "\n" +
- "Content-Transfer-Encoding: " + m_sEncoding + "\n" +
- "X-Genarator: " + m_sXGenerator + "\n" +
- "X-Accelerator_Marker: " + m_sXAcceleratorMarker + "\n");
}
PoHeader::~PoHeader()
{
}
+//Set members on the basis of m_aGenPo
+void PoHeader::SetMembers()
+{
+ if( !m_aGenPo.isNull() )
+ {
+ m_sExtractionSource = m_aGenPo.getExtractCom();
+ OString sTemp = m_aGenPo.getTransStr();
+
+ sal_Int32 nToken = 0;
+ m_sProjectIdVersion = ImplGetElement(sTemp,nToken++);
+ m_sReportMsgidBugsTo = ImplGetElement(sTemp,nToken++);
+ m_sPotCreationDate = ImplGetElement(sTemp,nToken++);
+ m_sPoRevisionDate = ImplGetElement(sTemp,nToken++);
+ m_sLastTranslator = ImplGetElement(sTemp,nToken++);
+ m_sLanguageTeam = ImplGetElement(sTemp,nToken++);
+ if( sTemp.getToken(nToken,'\n').match("Language:") )
+ m_sLanguage = ImplGetElement(sTemp,nToken++);
+ m_sMimeVersion = ImplGetElement(sTemp,nToken++);
+ m_sContentType = ImplGetElement(sTemp,nToken++);
+ m_sEncoding = ImplGetElement(sTemp,nToken++);
+ if( sTemp.getToken(nToken,'\n').match("Plural-Forms:") )
+ m_sPluralForms = ImplGetElement(sTemp,nToken++);
+ m_sXGenerator = ImplGetElement(sTemp,nToken++);
+ m_sXAcceleratorMarker = ImplGetElement(sTemp,nToken);
+ }
+}
+
void PoHeader::writeToFile(std::ofstream& rOFStream)
{
+ m_aGenPo.setExtractCom("extracted from " + m_sExtractionSource);
+ m_aGenPo.setTransStr(
+ "Project-Id-Version: " + m_sProjectIdVersion + "\n" +
+ "Report-Msgid-Bugs-To: " + m_sReportMsgidBugsTo + "\n" +
+ "POT-Creation-Date: " + m_sPotCreationDate + "\n" +
+ "PO-Revision-Date: " + m_sPoRevisionDate + "\n" +
+ "Last-Translator: " + m_sLastTranslator + "\n" +
+ "Language-Team: " + m_sLanguageTeam + "\n" +
+ ( m_sLanguage.isEmpty() ? "" : "Language: " + m_sLanguage + "\n" ) +
+ "MIME-Version: " + m_sMimeVersion + "\n" +
+ "Content-Type: " + m_sContentType + "\n" +
+ "Content-Transfer-Encoding: " + m_sEncoding + "\n" +
+ ( m_sPluralForms.isEmpty() ? "" :
+ "Plural-Forms: " + m_sPluralForms + "\n" ) +
+ "X-Genarator: " + m_sXGenerator + "\n" +
+ "X-Accelerator_Marker: " + m_sXAcceleratorMarker + "\n");
m_aGenPo.writeToFile(rOFStream);
}
+void PoHeader::readFromFile(std::ifstream& rIFStream)
+{
+ *this = PoHeader();
+ m_aGenPo.readFromFile(rIFStream);
+ SetMembers();
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/l10ntools/source/renewpo.cxx b/l10ntools/source/renewpo.cxx
index 7e567f07d52e..3e4e98f34c02 100644
--- a/l10ntools/source/renewpo.cxx
+++ b/l10ntools/source/renewpo.cxx
@@ -124,15 +124,15 @@ void HandleLanguage(struct dirent* pLangEntry, const OString& rPath,
{
if (!sActUnTrans.getToken(vTypes[nIndex],'\t').isEmpty())
{
- /**Because of xrmex lexer there are duplicated id's,
- only use this if the lexer have already fixed*/
+ /**Because of xrmex there are duplicated id's,
+ only use this if xrmex have already fixed
if (sActUnTrans.getToken(PoEntry::GROUPID,'\t')==
sActUnTrans.getToken(PoEntry::LOCALID,'\t') &&
sActUnTrans.getToken(PoEntry::SOURCEFILE,'\t').
endsWith(".xrm"))
{
sActUnTrans = DelLocalId(sActUnTrans);
- }
+ }*/
PoEntry aPE(sActUnTrans, vTypes[nIndex]);
aPE.setTransStr(sActTrans.getToken(vTypes[nIndex],'\t'));
aPE.setFuzzy(sActTrans.isEmpty() ? 0 :
diff --git a/solenv/gbuild/AllLangResTarget.mk b/solenv/gbuild/AllLangResTarget.mk
index e7703df7cbe8..f03a410cf956 100644
--- a/solenv/gbuild/AllLangResTarget.mk
+++ b/solenv/gbuild/AllLangResTarget.mk
@@ -51,21 +51,31 @@ gb_SrsPartMergeTarget_TRANSEXTARGET := $(call gb_Executable_get_target_for_build
gb_SrsPartMergeTarget_TRANSEXCOMMAND := \
$(gb_Helper_set_ld_path) $(gb_SrsPartMergeTarget_TRANSEXTARGET)
+
+define gb_GetPoFiles
+echo $(foreach lang,$(filter-out en-US,$(gb_WITH_LANG)), $(gb_POLOCATION)/$(lang)/$(1)) > $(2)
+endef
+
define gb_SrsPartMergeTarget__command
$(call gb_Output_announce,$(3),$(true),srs,1)
+POFILES=`$(gb_MKTEMP)` && \
+$(call gb_GetPoFiles,$(PO),$${POFILES}) && \
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1)) && \
$(gb_SrsPartMergeTarget_TRANSEXCOMMAND) \
-p $(firstword $(subst /, ,$(2))) \
-i $(3) \
-o $(1) \
- -m $(SDF) \
- -l all)
+ -m $${POFILES} \
+ -l all) && \
+rm -rf $${POFILES}
endef
$(call gb_SrsPartMergeTarget_get_target,%) : $(SRCDIR)/% $(gb_Helper_MISCDUMMY) $(gb_SrsPartMergeTarget_TRANSEXTARGET)
- $(if $(SDF),$(call gb_SrsPartMergeTarget__command,$@,$*,$<),mkdir -p $(dir $@) && cp $< $@)
+ $(if $(strip $(foreach lang,$(filter-out en-US,$(gb_WITH_LANG)),$(if $(wildcard $(gb_POLOCATION)/$(lang)/$(PO)),,x))),\
+ mkdir -p $(dir $@) && cp $< $@,\
+ $(call gb_SrsPartMergeTarget__command,$@,$*,$<))
# SrsPartTarget class
@@ -110,7 +120,7 @@ $(call gb_SrsPartTarget_get_target,$(1)) : MERGEDFILE :=
else
$(call gb_SrsPartTarget_get_target,$(1)) : MERGEDFILE := $(call gb_SrsPartMergeTarget_get_target,$(1))
$(call gb_SrsPartTarget_get_target,$(1)) : $(call gb_SrsPartMergeTarget_get_target,$(1))
-$(call gb_SrsPartMergeTarget_get_target,$(1)) : SDF := $(wildcard $(gb_SDFLOCATION)/$(dir $(1))localize.sdf)
+$(call gb_SrsPartMergeTarget_get_target,$(1)) : PO := $(patsubst %/,%,$(dir $(1))).po
endif
endef
@@ -123,8 +133,8 @@ $(call gb_SrsTemplatePartTarget_get_target,$(1)) : $(call gb_SrsPartMergeTarget_
mkdir -p $$(dir $$@) && \
cp $$< $$@)
ifneq ($(strip $(WITH_LANG)),)
-$(call gb_SrsPartMergeTarget_get_target,$(1)) : SDF := $(wildcard $(gb_SDFLOCATION)/$(dir $(1))localize.sdf)
-$(call gb_SrsPartMergeTarget_get_target,$(1)) : $$(SDF)
+$(call gb_SrsPartMergeTarget_get_target,$(1)) : PO := $(patsubst %/,%,$(dir $(1))).po
+$(call gb_SrsPartMergeTarget_get_target,$(1)) : $$(PO)
endif
endef
diff --git a/solenv/gbuild/Configuration.mk b/solenv/gbuild/Configuration.mk
index 61254cea46bc..2ae4275ba753 100644
--- a/solenv/gbuild/Configuration.mk
+++ b/solenv/gbuild/Configuration.mk
@@ -38,7 +38,7 @@
# => XcuMergeTarget: merge
# => buildtools (cfgex)
# => Xcu data source
-# => localize.sdf
+# => *.po
# => XcsTarget (schema)
# Per-repo pattern rules for each repository do not work for all targets
@@ -249,18 +249,24 @@ gb_XcuMergeTarget_CFGEXCOMMAND := $(gb_Helper_set_ld_path) $(gb_XcuMergeTarget_C
# PRJNAME is computed from the stem (parameter $(2))
define gb_XcuMergeTarget__command
$(call gb_Output_announce,$(2),$(true),XCU,5)
+POFILES=`$(gb_MKTEMP)` && \
+$(call gb_GetPoFiles,$(PO),$${POFILES}) && \
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1)) && \
$(gb_XcuMergeTarget_CFGEXCOMMAND) \
-p $(firstword $(subst /, ,$(2))) \
-i $(call gb_Helper_symlinked_native,$(3)) \
-o $(1) \
- -m $(SDF) \
- -l all)
+ -m $${POFILES} \
+ -l all) && \
+rm -rf $${POFILES}
+
endef
$(call gb_XcuMergeTarget_get_target,%) : $(gb_XcuMergeTarget_CFGEXTARGET)
- $(if $(SDF),$(call gb_XcuMergeTarget__command,$@,$*,$(filter %.xcu,$^)),mkdir -p $(dir $@) && cp $(filter %.xcu,$^) $@)
+ $(if $(strip $(foreach lang,$(filter-out en-US,$(gb_WITH_LANG)),$(if $(wildcard $(gb_POLOCATION)/$(lang)/$(PO)),,x))),\
+ mkdir -p $(dir $@) && cp $(filter %.xcu,$^) $@,\
+ $(call gb_XcuMergeTarget__command,$@,$*,$(filter %.xcu,$^)))
$(call gb_XcuMergeTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCU,5)
@@ -271,9 +277,8 @@ $(call gb_XcuMergeTarget_get_clean_target,%) :
define gb_XcuMergeTarget_XcuMergeTarget
$(call gb_XcuMergeTarget_get_target,$(1)) : \
$(call gb_Configuration__get_source,$(2),$(3)/$(4)) \
- $(wildcard $(gb_SDFLOCATION)/$(dir $(1))localize.sdf)
-$(call gb_XcuMergeTarget_get_target,$(1)) : \
- SDF := $(wildcard $(gb_SDFLOCATION)/$(dir $(1))localize.sdf)
+ $(wildcard $(foreach lang,$(filter-out en-US,$(gb_WITH_LANG)),$(gb_POLOCATION)/$(lang)/$(patsubst %/,%,$(dir $(1))).po))
+$(call gb_XcuMergeTarget_get_target,$(1)) : PO := $(patsubst %/,%,$(dir $(1))).po
endef
diff --git a/solenv/gbuild/ExtensionTarget.mk b/solenv/gbuild/ExtensionTarget.mk
index 105e58e0bfd3..4e9e6df6af25 100644
--- a/solenv/gbuild/ExtensionTarget.mk
+++ b/solenv/gbuild/ExtensionTarget.mk
@@ -72,14 +72,18 @@ $(call gb_ExtensionTarget_get_workdir,%)/description.xml :
else
$(call gb_ExtensionTarget_get_workdir,%)/description.xml : $(gb_ExtensionTarget_XRMEXTARGET)
$(call gb_Output_announce,$*/description.xml,$(true),XRM,3)
+ POFILES=`$(gb_MKTEMP)` && \
+ $(call gb_GetPoFiles,$(PO),$${POFILES}) && \
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(call gb_ExtensionTarget_get_workdir,$*) && \
$(gb_ExtensionTarget_XRMEXCOMMAND) \
-p $(PRJNAME) \
-i $(call gb_Helper_symlinked_native,$(filter %.xml,$^)) \
-o $@ \
- -m $(SDF) \
- -l all)
+ -m $${POFILES} \
+ -l all) && \
+ rm -rf $${POFILES}
+
endif
# rule to create oxt package in workdir
@@ -112,8 +116,8 @@ $(call gb_ExtensionTarget_get_target,$(1)) : PLATFORM :=
$(call gb_ExtensionTarget_get_target,$(1)) : PRJNAME := $(firstword $(subst /, ,$(2)))
$(call gb_ExtensionTarget_get_workdir,$(1))/description.xml : $(SRCDIR)/$(2)/description.xml
ifneq ($(strip $(gb_WITH_LANG)),)
-$(call gb_ExtensionTarget_get_target,$(1)) : SDF := $(gb_SDFLOCATION)/$(2)/localize.sdf
-$(call gb_ExtensionTarget_get_workdir,$(1))/description.xml : $$(SDF)
+$(call gb_ExtensionTarget_get_target,$(1)) : PO := $(2).po
+$(call gb_ExtensionTarget_get_workdir,$(1))/description.xml : $$(PO)
endif
endef
@@ -197,16 +201,19 @@ define gb_ExtensionTarget_localize_properties
$(call gb_ExtensionTarget_get_target,$(1)) : FILES += $(2)
ifneq ($(strip $(gb_WITH_LANG)),)
$(call gb_ExtensionTarget_get_target,$(1)) : FILES += $(foreach lang,$(subst -,_,$(gb_ExtensionTarget_LANGS)),$(subst en_US,$(lang),$(2)))
-$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : SDF := $(gb_SDFLOCATION)$(subst $(SRCDIR),,$(dir $(3)))localize.sdf
-$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $$(SDF)
+$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : PO := $(patsubst /%/,%,$(subst $(SRCDIR),,$(dir $(3)))).po
+$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $$(PO)
endif
$(call gb_ExtensionTarget_get_target,$(1)) : $(call gb_ExtensionTarget_get_rootdir,$(1))/$(2)
$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $(3) \
$(gb_ExtensionTarget_PROPMERGETARGET)
$$(call gb_Output_announce,$(2),$(true),PRP,3)
+ POFILES=`$(gb_MKTEMP)` && \
+ $(call gb_GetPoFiles,$$(PO),$$$${POFILES}) && \
mkdir -p $$(dir $$@) && \
cp -f $$< $$@ \
- $(if $(strip $(gb_WITH_LANG)),&& $(gb_ExtensionTarget_PROPMERGECOMMAND) -i $$@ -m $$(SDF))
+ $(if $(strip $(gb_WITH_LANG)),&& $(gb_ExtensionTarget_PROPMERGECOMMAND) -i $$@ -m $$$${POFILES}) && \
+ rm -rf $$$${POFILES}
endef
@@ -221,13 +228,17 @@ endef
define gb_ExtensionTarget_localize_help_onelang
$(call gb_ExtensionTarget_get_target,$(1)) : $(call gb_ExtensionTarget_get_rootdir,$(1))/$(2)
-$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : SDF := $(gb_SDFLOCATION)$(subst $(SRCDIR),,$(subst $(WORKDIR)/CustomTarget,,$(dir $(3))))localize.sdf
-$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $$(SDF)
+$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : \
+ PO := $(patsubst /%/,%,$(subst $(SRCDIR),,$(subst $(WORKDIR)/CustomTarget,,$(dir $(3))))).po
+$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $$(PO)
$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $(gb_ExtensionTarget_HELPEXTARGET)
$(call gb_ExtensionTarget_get_rootdir,$(1))/$(2) : $(3)
$$(call gb_Output_announce,$(2),$(true),XHP,3)
+ POFILES=`$(gb_MKTEMP)` && \
+ echo $(gb_POLOCATION)/$(4)/$$(PO) > $$$${POFILES} && \
mkdir -p $$(dir $$@) && \
- $(gb_ExtensionTarget_HELPEXCOMMAND) -i $$< -o $$@ -l $(4) -m $$(SDF)
+ $(gb_ExtensionTarget_HELPEXCOMMAND) -i $$< -o $$@ -l $(4) -m $$$${POFILES} && \
+ rm -rf $$$${POFILES}
endef
diff --git a/solenv/gbuild/InstallModuleTarget.mk b/solenv/gbuild/InstallModuleTarget.mk
index 3d7fcd02ac89..1de6c8362f5e 100644
--- a/solenv/gbuild/InstallModuleTarget.mk
+++ b/solenv/gbuild/InstallModuleTarget.mk
@@ -113,9 +113,12 @@ gb_ScpMergeTarget_get_source = $(SRCDIR)/$(1).ulf
define gb_ScpMergeTarget__command
$(call gb_Output_announce,$(2),$(true),SUM,1)
+POFILES=`$(gb_MKTEMP)` && \
+$(call gb_GetPoFiles,$(SCP_PO),$${POFILES}) && \
$(call gb_Helper_abbreviate_dirs,\
- $(gb_ScpMergeTarget_COMMAND) -p scp2 -i $(3) -o $(1) -m $(SCP_SDF) -l all \
-)
+ $(gb_ScpMergeTarget_COMMAND) -p scp2 -i $(3) -o $(1) -m $${POFILES} -l all ) && \
+rm -rf $${POFILES}
+
endef
$(dir $(call gb_ScpMergeTarget_get_target,%))%/.dir :
@@ -133,8 +136,8 @@ $(call gb_ScpMergeTarget_get_clean_target,%) :
define gb_ScpMergeTarget_ScpMergeTarget
$(call gb_ScpMergeTarget_get_target,$(1)) : $(call gb_ScpMergeTarget_get_source,$(1))
$(call gb_ScpMergeTarget_get_target,$(1)) :| $(dir $(call gb_ScpMergeTarget_get_target,$(1))).dir
-$(call gb_ScpMergeTarget_get_target,$(1)) : SCP_SDF := $(gb_SDFLOCATION)/$(dir $(1))/localize.sdf
-$(call gb_ScpMergeTarget_get_target,$(1)) : $$(SCP_SDF)
+$(call gb_ScpMergeTarget_get_target,$(1)) : SCP_PO := $(patsubst %/,%,$(dir $(1))).po
+$(call gb_ScpMergeTarget_get_target,$(1)) : $$(SCP_PO)
endef
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index d24c76825b4d..20d1487f7221 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -306,6 +306,6 @@ gb_StaticLibrary_OUTDIRLOCATION = $(OUTDIR)/lib
# static variables declared here because they are used globally
-gb_SDFLOCATION := $(WORKDIR)/CustomTarget/translations/translate/sdf
+gb_POLOCATION := $(SRCDIR)/translations/source
# vim: set noet sw=4:
diff --git a/solenv/inc/rules.mk b/solenv/inc/rules.mk
index 93e3b02390ff..b4561b9c7693 100644
--- a/solenv/inc/rules.mk
+++ b/solenv/inc/rules.mk
@@ -702,16 +702,12 @@ $(COMMONMISC)/$(TARGET)/%.uulf : $$(@:b).ulf
@$(RENAME) $@.$(INPATH) $@
@-$(RM) $@.$(INPATH)
-# This is still needed?????
+POLOCATION:=$(SRCDIR)$/translations/source
+PORELPATH:=$(PRJNAME)$/$(PATH_IN_MODULE).po
+
$(COMMONMISC)/$(TARGET)/%.xrm : %.xrm
$(COMMAND_ECHO)-$(MKDIR) $(@:d)
$(COMMAND_ECHO)-$(RM) $@
- $(COMMAND_ECHO)$(XRMEX) -p $(PRJNAME) -i $(@:f) -o $(@).$(INPATH) -m $(LOCALIZESDF) -l all
+ $(COMMAND_ECHO)$(XRMEX) -p $(PRJNAME) -i $(@:f) -o $(@).$(INPATH) -m $(mktmp $(foreach,lang,$(subst,en-US, $(WITH_LANG)) $(POLOCATION)/$(lang)/$(PORELPATH))) -l all
$(COMMAND_ECHO)$(RENAME) $@.$(INPATH) $@
$(COMMAND_ECHO)-$(RM) $@.$(INPATH)
-
-# dirty hack
-# if local *.sdf file is missing
-#%.sdf:
-# echo > $@
-