summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 > $@
-