Load the locales from config file for languagetool
Locales needs to be read again in the Preferences/Writing Aids section and since this is a network operation it can cause a problem. Better to list all the supported locales in the xcu and load it right away. Signed-off-by: Mert Tumer <mert.tumer@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135598 Tested-by: Jenkins Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153959 Reviewed-by: Andras Timar <andras.timar@collabora.com> Tested-by: Andras Timar <andras.timar@collabora.com> (cherry picked from commit 84bdf9e81a63a8bd308709c86b51bf3900a23c50) Change-Id: Iad9201101aa167ad33f479c67f72649786e1f2cf Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158330 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
This commit is contained in:
committed by
Caolán McNamara
parent
2c0669846f
commit
7fbea38b7a
@@ -196,6 +196,8 @@ public:
|
|||||||
|
|
||||||
bool GetDictionaryEntry( const OUString &rNodeName, SvtLinguConfigDictionaryEntry &rDicEntry ) const;
|
bool GetDictionaryEntry( const OUString &rNodeName, SvtLinguConfigDictionaryEntry &rDicEntry ) const;
|
||||||
|
|
||||||
|
bool GetLocaleListFor( const OUString &rSetName, const OUString &rSetEntry, css::uno::Sequence< OUString > &rLocaleList ) const;
|
||||||
|
|
||||||
css::uno::Sequence< OUString > GetDisabledDictionaries() const;
|
css::uno::Sequence< OUString > GetDisabledDictionaries() const;
|
||||||
|
|
||||||
std::vector< SvtLinguConfigDictionaryEntry > GetActiveDictionariesByFormat( std::u16string_view rFormatName ) const;
|
std::vector< SvtLinguConfigDictionaryEntry > GetActiveDictionariesByFormat( std::u16string_view rFormatName ) const;
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!--
|
||||||
|
* This file is part of the LibreOffice project.
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
*
|
||||||
|
* This file incorporates work covered by the following license notice:
|
||||||
|
*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed
|
||||||
|
* with this work for additional information regarding copyright
|
||||||
|
* ownership. The ASF licenses this file to you under the Apache
|
||||||
|
* License, Version 2.0 (the "License"); you may not use this file
|
||||||
|
* except in compliance with the License. You may obtain a copy of
|
||||||
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||||
|
-->
|
||||||
|
<oor:component-data oor:name="Linguistic" oor:package="org.openoffice.Office" xmlns:install="http://openoffice.org/2004/installation" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<node oor:name="ServiceManager">
|
||||||
|
<node oor:name="GrammarCheckers">
|
||||||
|
<node oor:name="org.openoffice.lingu.LanguageToolGrammarChecker" oor:op="fuse">
|
||||||
|
<prop oor:name="Locales" oor:type="oor:string-list">
|
||||||
|
<value>ar ast-ES be-BY br-FR ca-ES ca-ES-valencia zh-CN da-DK nl nl-BE en en-AU en-CA en-GB en-NZ en-ZA en-US fr gl-ES de de-AT de-DE de-CH el-GR ga-IE it ja-JP km-KH nb no fa pl-PL pt pt-AO pt-BR pt-MZ pt-PT ro-RO ru-RU de-DE-x-simple-language sk-SK sl-SI es es-AR sv tl-PH ta-IN uk-UA</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</oor:component-data>
|
||||||
|
|
@@ -295,14 +295,6 @@ void parseProofreadingJSONResponse(ProofreadingResult& rResult, std::string&& aJ
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
OUString getLocaleListURL()
|
|
||||||
{
|
|
||||||
if (auto oURL = LanguageToolCfg::BaseURL::get())
|
|
||||||
if (!oURL->isEmpty())
|
|
||||||
return *oURL + "/languages";
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
OUString getCheckerURL()
|
OUString getCheckerURL()
|
||||||
{
|
{
|
||||||
if (auto oURL = LanguageToolCfg::BaseURL::get())
|
if (auto oURL = LanguageToolCfg::BaseURL::get())
|
||||||
@@ -336,44 +328,29 @@ sal_Bool SAL_CALL LanguageToolGrammarChecker::hasLocale(const Locale& rLocale)
|
|||||||
|
|
||||||
uno::Sequence<Locale> SAL_CALL LanguageToolGrammarChecker::getLocales()
|
uno::Sequence<Locale> SAL_CALL LanguageToolGrammarChecker::getLocales()
|
||||||
{
|
{
|
||||||
|
osl::MutexGuard aGuard(linguistic::GetLinguMutex());
|
||||||
|
|
||||||
if (m_aSuppLocales.hasElements())
|
if (m_aSuppLocales.hasElements())
|
||||||
return m_aSuppLocales;
|
return m_aSuppLocales;
|
||||||
|
|
||||||
if (!LanguageToolCfg::IsEnabled::get())
|
if (!LanguageToolCfg::IsEnabled::get())
|
||||||
{
|
|
||||||
return m_aSuppLocales;
|
return m_aSuppLocales;
|
||||||
}
|
|
||||||
|
|
||||||
OUString localeUrl = getLocaleListURL();
|
SvtLinguConfig aLinguCfg;
|
||||||
if (localeUrl.isEmpty())
|
uno::Sequence<OUString> aLocaleList;
|
||||||
{
|
aLinguCfg.GetLocaleListFor("GrammarCheckers", "org.openoffice.lingu.LanguageToolGrammarChecker",
|
||||||
return m_aSuppLocales;
|
aLocaleList);
|
||||||
}
|
|
||||||
tools::Long statusCode = 0;
|
|
||||||
std::string response = makeHttpRequest(localeUrl, HTTP_METHOD::HTTP_GET, OString(), statusCode);
|
|
||||||
if (statusCode != 200)
|
|
||||||
{
|
|
||||||
return m_aSuppLocales;
|
|
||||||
}
|
|
||||||
if (response.empty())
|
|
||||||
{
|
|
||||||
return m_aSuppLocales;
|
|
||||||
}
|
|
||||||
boost::property_tree::ptree root;
|
|
||||||
std::stringstream aStream(response);
|
|
||||||
boost::property_tree::read_json(aStream, root);
|
|
||||||
|
|
||||||
size_t length = root.size();
|
auto nLength = aLocaleList.getLength();
|
||||||
m_aSuppLocales.realloc(length);
|
m_aSuppLocales.realloc(nLength);
|
||||||
auto pArray = m_aSuppLocales.getArray();
|
auto pArray = m_aSuppLocales.getArray();
|
||||||
int i = 0;
|
auto pLocaleList = aLocaleList.getArray();
|
||||||
for (auto it = root.begin(); it != root.end(); it++, i++)
|
|
||||||
|
for (auto i = 0; i < nLength; i++)
|
||||||
{
|
{
|
||||||
boost::property_tree::ptree& localeItem = it->second;
|
pArray[i] = LanguageTag::convertToLocale(pLocaleList[i]);
|
||||||
const std::string longCode = localeItem.get<std::string>("longCode");
|
|
||||||
Locale aLocale = LanguageTag::convertToLocale(
|
|
||||||
OUString(longCode.c_str(), longCode.length(), RTL_TEXTENCODING_UTF8));
|
|
||||||
pArray[i] = aLocale;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m_aSuppLocales;
|
return m_aSuppLocales;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -116,6 +116,7 @@ postprocess_DEPS_lingucomponent := main
|
|||||||
postprocess_FILES_lingucomponent := \
|
postprocess_FILES_lingucomponent := \
|
||||||
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-hyphenator.xcu \
|
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-hyphenator.xcu \
|
||||||
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-spellchecker.xcu \
|
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-spellchecker.xcu \
|
||||||
|
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-grammarchecker.xcu \
|
||||||
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-thesaurus.xcu \
|
$(SRCDIR)/lingucomponent/config/Linguistic-lingucomponent-thesaurus.xcu \
|
||||||
|
|
||||||
postprocess_FILES_main := \
|
postprocess_FILES_main := \
|
||||||
|
@@ -941,6 +941,27 @@ bool SvtLinguConfig::GetSupportedDictionaryFormatsFor(
|
|||||||
return bSuccess;
|
return bSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SvtLinguConfig::GetLocaleListFor( const OUString &rSetName, const OUString &rSetEntry, css::uno::Sequence< OUString > &rLocaleList ) const
|
||||||
|
{
|
||||||
|
if (rSetName.isEmpty() || rSetEntry.isEmpty())
|
||||||
|
return false;
|
||||||
|
bool bSuccess = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
uno::Reference< container::XNameAccess > xNA( GetMainUpdateAccess(), uno::UNO_QUERY_THROW );
|
||||||
|
xNA.set( xNA->getByName("ServiceManager"), uno::UNO_QUERY_THROW );
|
||||||
|
xNA.set( xNA->getByName( rSetName ), uno::UNO_QUERY_THROW );
|
||||||
|
xNA.set( xNA->getByName( rSetEntry ), uno::UNO_QUERY_THROW );
|
||||||
|
if (xNA->getByName( "Locales" ) >>= rLocaleList)
|
||||||
|
bSuccess = true;
|
||||||
|
DBG_ASSERT( rLocaleList.hasElements(), "Locale list is empty" );
|
||||||
|
}
|
||||||
|
catch (uno::Exception &)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return bSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
static bool lcl_GetFileUrlFromOrigin(
|
static bool lcl_GetFileUrlFromOrigin(
|
||||||
OUString /*out*/ &rFileUrl,
|
OUString /*out*/ &rFileUrl,
|
||||||
const OUString &rOrigin )
|
const OUString &rOrigin )
|
||||||
|
Reference in New Issue
Block a user