android/README | 5 android/app/build.gradle | 15 android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java | 5 android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java | 67 - android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java | 3 android/app/src/main/java/org/libreoffice/androidapp/storage/DocumentProviderFactory.java | 3 android/app/src/main/java/org/libreoffice/androidapp/storage/IDocumentProvider.java | 2 android/app/src/main/java/org/libreoffice/androidapp/storage/IFile.java | 4 android/app/src/main/java/org/libreoffice/androidapp/storage/external/ExternalFile.java | 28 android/app/src/main/java/org/libreoffice/androidapp/storage/external/ExtsdDocumentsProvider.java | 5 android/app/src/main/java/org/libreoffice/androidapp/storage/external/OTGDocumentsProvider.java | 5 android/app/src/main/java/org/libreoffice/androidapp/storage/local/LocalFile.java | 2 android/app/src/main/java/org/libreoffice/androidapp/storage/owncloud/OwnCloudFile.java | 54 - android/app/src/main/java/org/libreoffice/androidapp/storage/owncloud/OwnCloudProvider.java | 8 android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java | 102 +- android/app/src/main/locale/template.pot | 444 ++++++++++ android/app/src/main/res/menu/navigation_menu.xml | 6 android/app/src/main/res/values-es/strings.xml | 143 +++ android/app/src/main/res/values-pt-rBR/strings.xml | 143 +++ android/app/src/main/res/values-tr/strings.xml | 120 ++ android/app/src/main/res/values/arrays.xml | 8 android/app/src/main/res/values/strings.xml | 26 android/app/src/main/res/xml/libreoffice_preferences.xml | 9 android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java | 111 +- android/lib/src/main/res/values-es/strings.xml | 10 android/lib/src/main/res/values-pt-rBR/strings.xml | 10 loleaflet/Makefile.am | 8 loleaflet/css/leaflet.css | 32 loleaflet/js/global.js | 9 loleaflet/src/control/Control.MobileWizard.js | 21 loleaflet/src/control/Control.Scroll.js | 16 loleaflet/src/control/Control.Toolbar.js | 21 loleaflet/src/control/Ruler.js | 180 +++- loleaflet/src/layer/tile/TileLayer.js | 6 loleaflet/src/map/Map.js | 6 loleaflet/util/create-l10n-all-js.pl | 2 loolwsd.xml.in | 1 test/data/convert-to.xlsx |binary test/integration-http-server.cpp | 40 wsd/DocumentBroker.cpp | 98 ++ wsd/DocumentBroker.hpp | 21 wsd/LOOLWSD.cpp | 64 - 42 files changed, 1513 insertions(+), 350 deletions(-)
New commits: commit d29504df9b48ff2485559f9ae7d23aa2a4b42412 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Thu Dec 12 10:14:34 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Make all the .uno: commands work again. Was a problem introduced by c6f36965cfc1bd68fdb88b01d493163b5d176bcc. Change-Id: I8fbc722ed73af19a6462c87242d431eea118f1a2 Reviewed-on: https://gerrit.libreoffice.org/85020 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java index bae078ab9..e1efc01f9 100644 --- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java +++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java @@ -605,6 +605,7 @@ public class LOActivity extends AppCompatActivity { break; } } + break; case "DIM_SCREEN": { mainHandler.post(new Runnable() { @Override commit 5afeb1341451d8c81a4ca747c59b59f86390b790 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Thu Dec 12 09:56:43 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 mobile: Fix build. Change-Id: Ie0f08a984b9333ca65d0fd52c71e358b7fd5f771 Reviewed-on: https://gerrit.libreoffice.org/85018 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 700a56fbf..77204dd69 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -2207,6 +2207,7 @@ ConvertToBroker::ConvertToBroker(const std::string& uri, _limitLifeSeconds = limit_convert_secs; } +#if !MOBILEAPP bool ConvertToBroker::startConversion(SocketDisposition &disposition, const std::string &id) { std::shared_ptr<ConvertToBroker> docBroker = std::static_pointer_cast<ConvertToBroker>(shared_from_this()); @@ -2252,6 +2253,7 @@ bool ConvertToBroker::startConversion(SocketDisposition &disposition, const std: }); return true; } +#endif void ConvertToBroker::dispose() { diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp index 5632c56b6..07f967579 100644 --- a/wsd/DocumentBroker.hpp +++ b/wsd/DocumentBroker.hpp @@ -532,8 +532,10 @@ public: const std::string& sOptions); virtual ~ConvertToBroker(); +#if !MOBILEAPP /// Move socket to this broker for response & do conversion bool startConversion(SocketDisposition &disposition, const std::string &id); +#endif /// Called when removed from the DocBrokers list void dispose() override; commit 18a966a486c9fdd62cda97996349fa018379b210 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Thu Dec 12 01:32:48 2019 -0500 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 leaflet: improved sidebar wizard handling Now the Hamburger works and the sidebar updates are more accurate. Change-Id: I2f8df05801297d8ec29bf1d966624f06df685d31 Reviewed-on: https://gerrit.libreoffice.org/85010 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Jan Holesovsky <ke...@collabora.com> diff --git a/loleaflet/src/control/Control.MobileWizard.js b/loleaflet/src/control/Control.MobileWizard.js index 4715f0694..912c4602d 100644 --- a/loleaflet/src/control/Control.MobileWizard.js +++ b/loleaflet/src/control/Control.MobileWizard.js @@ -26,7 +26,7 @@ L.Control.MobileWizard = L.Control.extend({ this.map = map; map.on('mobilewizard', this._onMobileWizard, this); map.on('closemobilewizard', this._hideWizard, this); - map.on('showmobilewizard', this._showWizard, this); + map.on('showwizardsidebar', this._showWizardSidebar, this); this._setupBackButton(); }, @@ -60,6 +60,12 @@ L.Control.MobileWizard = L.Control.extend({ $('#toolbar-down').hide(); }, + _showWizardSidebar: function() { + this.map.showSidebar = true; + this._refreshSidebar(); + this._showWizard(); + }, + _hideWizard: function() { $('#mobile-wizard').hide(); $('#mobile-wizard-content').empty(); @@ -67,6 +73,7 @@ L.Control.MobileWizard = L.Control.extend({ $('#toolbar-down').show(); } + this.map.showSidebar = false; this._isActive = false; this._currentPath = []; if (window.mobileWizard === true) { @@ -228,8 +235,10 @@ L.Control.MobileWizard = L.Control.extend({ if (data) { var isSidebar = data.id !== 'menubar' && data.id !== 'insertshape' && data.id !== 'funclist'; - if (!this._isActive && isSidebar) - this._refreshSidebar(); + if (!this._isActive && isSidebar) { + if (this.map.showSidebar == false) + return; + } this._isActive = true; var currentPath = null; @@ -242,10 +251,8 @@ L.Control.MobileWizard = L.Control.extend({ this._reset(); - if (window.mobileWizard) { - this._showWizard(); - this._hideKeyboard(); - } + this._showWizard(); + this._hideKeyboard(); // We can change the sidebar as we want here if (data.id === '') { // sidebar indicator diff --git a/loleaflet/src/control/Control.Toolbar.js b/loleaflet/src/control/Control.Toolbar.js index 4e8c1943e..a068c3af9 100644 --- a/loleaflet/src/control/Control.Toolbar.js +++ b/loleaflet/src/control/Control.Toolbar.js @@ -346,7 +346,19 @@ function onClick(e, id, item, subItem) { if (window.insertionMobileWizard) this.onClick(null, 'insertion_mobile_wizard'); window.mobileWizard = true; - map.fire('showmobilewizard'); + if (!map._sidebarVisible) { + map._sidebarVisible = true; + map.sendUnoCommand('.uno:Sidebar'); + } else { + // As the sidebar LOKWindowId can and does change, + // esp. between chart and other elements, we apparently + // lose track, and there is currently no reliable way to + // recover it (which is needed to request updates). + // The following disable and enable the sidebar to get it. + map.sendUnoCommand('.uno:Sidebar'); + map.sendUnoCommand('.uno:Sidebar'); + } + map.fire('showwizardsidebar'); toolbar.check(id); } } diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index d6e406884..491d14731 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -875,8 +875,8 @@ L.TileLayer = L.GridLayer.extend({ this._map.fire('mobilewizard', data); }, - _closeMobileWizard: function(data) { - this._map.fire('closemobilewizard', data); + _closeMobileWizard: function() { + this._map.fire('closemobilewizard'); }, _onJSDialogMsg: function (textMsg) { @@ -885,7 +885,7 @@ L.TileLayer = L.GridLayer.extend({ if (msgData.enabled) { this._openMobileWizard(msgData); } else { - this._closeMobileWizard(msgData); + this._closeMobileWizard(); } } }, diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index af149f236..8e9f98d45 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -110,6 +110,8 @@ L.Map = L.Evented.extend({ this._disableDefaultAction = {}; // The events for which the default handler is disabled and only issues postMessage. this._winId = 0; this._activeDialog = null; + this._sidebarVisible = false; // The state of the sidebar in Core. + this._showSidebar = false; // Whether we have the sidebar visible in the UI or not (i.e. does the user want to see it or not). vex.dialogID = -1; @@ -294,7 +296,9 @@ L.Map = L.Evented.extend({ // thinks it is shown, so the command has to be triggered // once again for it to be visible on the desktop // (because the first .uno:Sidebar has actually hid it) - map._socket.sendMessage('uno .uno:Sidebar'); + if (!window.mode.isMobile() && !window.mode.isTablet() && !window.ThisIsAMobileApp) { + map._socket.sendMessage('uno .uno:Sidebar'); + } }, 200); } commit 86a1d5e08c7776ec05cca8ecb0c560705542c947 Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Thu Dec 12 05:33:09 2019 +0000 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 A new convert-to unit test, hopefully taking longer to load. Change-Id: I8d8291e272a175ab3c846b692bb34b185b2b8278 Reviewed-on: https://gerrit.libreoffice.org/85008 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/test/data/convert-to.xlsx b/test/data/convert-to.xlsx new file mode 100644 index 000000000..7af9e7063 Binary files /dev/null and b/test/data/convert-to.xlsx differ diff --git a/test/integration-http-server.cpp b/test/integration-http-server.cpp index c19c57904..a2ceaca92 100644 --- a/test/integration-http-server.cpp +++ b/test/integration-http-server.cpp @@ -51,6 +51,7 @@ class HTTPServerTest : public CPPUNIT_NS::TestFixture CPPUNIT_TEST(testScriptsAndLinksGet); CPPUNIT_TEST(testScriptsAndLinksPost); CPPUNIT_TEST(testConvertTo); + CPPUNIT_TEST(testConvertTo2); CPPUNIT_TEST(testConvertToWithForwardedClientIP); CPPUNIT_TEST_SUITE_END(); @@ -62,6 +63,7 @@ class HTTPServerTest : public CPPUNIT_NS::TestFixture void testScriptsAndLinksGet(); void testScriptsAndLinksPost(); void testConvertTo(); + void testConvertTo2(); void testConvertToWithForwardedClientIP(); public: @@ -375,6 +377,44 @@ void HTTPServerTest::testConvertTo() CPPUNIT_ASSERT_EQUAL(expectedStream.str(), actualString); } +void HTTPServerTest::testConvertTo2() +{ + const std::string srcPath = FileUtil::getTempFilePath(TDOC, "convert-to.xlsx", "convertTo_"); + std::unique_ptr<Poco::Net::HTTPClientSession> session(helpers::createSession(_uri)); + session->setTimeout(Poco::Timespan(5, 0)); // 5 seconds. + + Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/lool/convert-to"); + Poco::Net::HTMLForm form; + form.setEncoding(Poco::Net::HTMLForm::ENCODING_MULTIPART); + form.set("format", "png"); + form.addPart("data", new Poco::Net::FilePartSource(srcPath)); + form.prepareSubmit(request); + try + { + form.write(session->sendRequest(request)); + } + catch (const std::exception& ex) + { + // In case the server is still starting up. + sleep(2); + form.write(session->sendRequest(request)); + } + + Poco::Net::HTTPResponse response; + std::stringstream actualStream; + std::istream& responseStream = session->receiveResponse(response); + Poco::StreamCopier::copyStream(responseStream, actualStream); + + // Remove the temp files. + FileUtil::removeFile(srcPath); + + std::string actualString = actualStream.str(); + CPPUNIT_ASSERT(actualString.size() >= 100); +// CPPUNIT_ASSERT_EQUAL(actualString[0], 0x89); + CPPUNIT_ASSERT_EQUAL(actualString[1], 'P'); + CPPUNIT_ASSERT_EQUAL(actualString[2], 'N'); + CPPUNIT_ASSERT_EQUAL(actualString[3], 'G'); +} void HTTPServerTest::testConvertToWithForwardedClientIP() { commit eeba94228cb7c3b7405cdc90af0d44d861df76aa Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Thu Dec 12 05:09:35 2019 +0000 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 convert-to: wait for load to complete before attempting the save. Change-Id: Iee3a8a6720bbc29fc4e113bf705f405b840e1e45 Reviewed-on: https://gerrit.libreoffice.org/85009 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index af756c676..700a56fbf 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -2195,14 +2195,64 @@ size_t ConvertToBroker::getInstanceCount() ConvertToBroker::ConvertToBroker(const std::string& uri, const Poco::URI& uriPublic, - const std::string& docKey) - : DocumentBroker(uri, uriPublic, docKey) + const std::string& docKey, + const std::string& format, + const std::string& sOptions) : + DocumentBroker(uri, uriPublic, docKey), + _format(format), + _sOptions(sOptions) { static const int limit_convert_secs = LOOLWSD::getConfigValue<int>("per_document.limit_convert_secs", 100); NumConverters++; _limitLifeSeconds = limit_convert_secs; } +bool ConvertToBroker::startConversion(SocketDisposition &disposition, const std::string &id) +{ + std::shared_ptr<ConvertToBroker> docBroker = std::static_pointer_cast<ConvertToBroker>(shared_from_this()); + + // Create a session to load the document. + const bool isReadOnly = true; + _clientSession = std::make_shared<ClientSession>(id, docBroker, getPublicUri(), isReadOnly, "nocliphost"); + _clientSession->construct(); + + if (!_clientSession) + return false; + + disposition.setMove([docBroker] (const std::shared_ptr<Socket> &moveSocket) + { + // Perform all of this after removing the socket + + // Make sure the thread is running before adding callback. + docBroker->startThread(); + + // We no longer own this socket. + moveSocket->setThreadOwner(std::thread::id(0)); + + docBroker->addCallback([docBroker, moveSocket]() + { + auto streamSocket = std::static_pointer_cast<StreamSocket>(moveSocket); + docBroker->_clientSession->setSaveAsSocket(streamSocket); + + // Move the socket into DocBroker. + docBroker->addSocketToPoll(moveSocket); + + // First add and load the session. + docBroker->addSession(docBroker->_clientSession); + + // Load the document manually and request saving in the target format. + std::string encodedFrom; + Poco::URI::encode(docBroker->getPublicUri().getPath(), "", encodedFrom); + const std::string load = "load url=" + encodedFrom; + std::vector<char> loadRequest(load.begin(), load.end()); + docBroker->_clientSession->handleMessage(true, WSOpCode::Text, loadRequest); + + // Save is done in the setLoaded + }); + }); + return true; +} + void ConvertToBroker::dispose() { if (!_uriOrig.empty()) @@ -2233,6 +2283,26 @@ void ConvertToBroker::removeFile(const std::string &uriOrig) } } +void ConvertToBroker::setLoaded() +{ + DocumentBroker::setLoaded(); + + // FIXME: Check for security violations. + Poco::Path toPath(getPublicUri().getPath()); + toPath.setExtension(_format); + const std::string toJailURL = "file://" + std::string(JAILED_DOCUMENT_ROOT) + toPath.getFileName(); + std::string encodedTo; + Poco::URI::encode(toJailURL, "", encodedTo); + + // Convert it to the requested format. + const std::string saveAsCmd = "saveas url=" + encodedTo + " format=" + _format + " options=" + _sOptions; + + // Send the save request ... + std::vector<char> saveasRequest(saveAsCmd.begin(), saveAsCmd.end()); + + _clientSession->handleMessage(true, WSOpCode::Text, saveasRequest); +} + std::vector<std::shared_ptr<ClientSession>> DocumentBroker::getSessionsTestOnlyUnsafe() { std::vector<std::shared_ptr<ClientSession>> result; diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp index 3b8f6e844..5632c56b6 100644 --- a/wsd/DocumentBroker.hpp +++ b/wsd/DocumentBroker.hpp @@ -245,7 +245,8 @@ public: /// Thread safe termination of this broker if it has a lingering thread void joinThread(); - void setLoaded(); + /// Notify that the load has completed + virtual void setLoaded(); bool isDocumentChangedInStorage() { return _documentChangedInStorage; } @@ -518,16 +519,28 @@ private: class ConvertToBroker : public DocumentBroker { + const std::string _format; + const std::string _sOptions; + std::shared_ptr<ClientSession> _clientSession; + public: /// Construct DocumentBroker with URI and docKey ConvertToBroker(const std::string& uri, const Poco::URI& uriPublic, - const std::string& docKey); + const std::string& docKey, + const std::string& format, + const std::string& sOptions); virtual ~ConvertToBroker(); + /// Move socket to this broker for response & do conversion + bool startConversion(SocketDisposition &disposition, const std::string &id); + /// Called when removed from the DocBrokers list void dispose() override; + /// When the load completes - lets start saving + void setLoaded() override; + /// How many live conversions are running. static size_t getInstanceCount(); diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 524415b6f..3a597c4a1 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -2605,7 +2605,6 @@ private: if (tokens.count() > 3) format = tokens[3]; - bool sent = false; std::string fromPath = handler.getFilename(); LOG_INF("Conversion request for URI [" << fromPath << "] format [" << format << "]."); if (!fromPath.empty() && !format.empty()) @@ -2627,7 +2626,7 @@ private: std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex); LOG_DBG("New DocumentBroker for docKey [" << docKey << "]."); - auto docBroker = std::make_shared<ConvertToBroker>(fromPath, uriPublic, docKey); + auto docBroker = std::make_shared<ConvertToBroker>(fromPath, uriPublic, docKey, format, sOptions); handler.takeFile(); cleanupDocBrokers(); @@ -2636,70 +2635,12 @@ private: DocBrokers.emplace(docKey, docBroker); LOG_TRC("Have " << DocBrokers.size() << " DocBrokers after inserting [" << docKey << "]."); - // Load the document. - // TODO: Move to DocumentBroker. - const bool isReadOnly = true; - std::shared_ptr<ClientSession> clientSession = createNewClientSession( - nullptr, _id, uriPublic, docBroker, isReadOnly, "nocliphost"); - if (clientSession) - { - disposition.setMove([docBroker, clientSession, format, sOptions] - (const std::shared_ptr<Socket> &moveSocket) - { - // Perform all of this after removing the socket - - // Make sure the thread is running before adding callback. - docBroker->startThread(); - - // We no longer own this socket. - moveSocket->setThreadOwner(std::thread::id(0)); - - docBroker->addCallback([docBroker, moveSocket, clientSession, format, sOptions]() - { - auto streamSocket = std::static_pointer_cast<StreamSocket>(moveSocket); - clientSession->setSaveAsSocket(streamSocket); - - // Move the socket into DocBroker. - docBroker->addSocketToPoll(moveSocket); - - // First add and load the session. - docBroker->addSession(clientSession); - - // Load the document manually and request saving in the target format. - std::string encodedFrom; - URI::encode(docBroker->getPublicUri().getPath(), "", encodedFrom); - const std::string load = "load url=" + encodedFrom; - std::vector<char> loadRequest(load.begin(), load.end()); - clientSession->handleMessage(true, WSOpCode::Text, loadRequest); - - // FIXME: Check for security violations. - Path toPath(docBroker->getPublicUri().getPath()); - toPath.setExtension(format); - const std::string toJailURL = "file://" + std::string(JAILED_DOCUMENT_ROOT) + toPath.getFileName(); - std::string encodedTo; - URI::encode(toJailURL, "", encodedTo); - - // Convert it to the requested format. - const auto saveas = "saveas url=" + encodedTo + " format=" + format + " options=" + sOptions; - std::vector<char> saveasRequest(saveas.begin(), saveas.end()); - clientSession->handleMessage(true, WSOpCode::Text, saveasRequest); - }); - }); - - sent = true; - } - else + if (!docBroker->startConversion(disposition, _id)) { LOG_WRN("Failed to create Client Session with id [" << _id << "] on docKey [" << docKey << "]."); cleanupDocBrokers(); } } - - if (!sent) - { - // TODO: We should differentiate between bad request and failed conversion. - throw BadRequestException("Failed to convert and send file."); - } return; } else if (tokens.count() >= 4 && tokens[3] == "insertfile") commit 0dfde7e1dcf65c56e840087be24173e45213bf38 Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Thu Dec 12 03:38:50 2019 +0000 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 Add a time limit for badly behaved / huge document conversions. Handles problems with load, save, and lingering DocumentBrokers. Change-Id: I6079cba3a4fa2a84c303b3a8669d94863a04f474 diff --git a/loolwsd.xml.in b/loolwsd.xml.in index 6b81a4385..71f6b8f6f 100644 --- a/loolwsd.xml.in +++ b/loolwsd.xml.in @@ -29,6 +29,7 @@ <limit_file_size_mb desc="The maximum file size allowed to each document process to write. 0 for unlimited." type="uint">0</limit_file_size_mb> <limit_num_open_files desc="The maximum number of files allowed to each document process to open. 0 for unlimited." type="uint">0</limit_num_open_files> <limit_load_secs desc="Maximum number of seconds to wait for a document load to succeed. 0 for unlimited." type="uint" default="100">100</limit_load_secs> + <limit_convert_secs desc="Maximum number of seconds to wait for a document conversion to succeed. 0 for unlimited." type="uint" default="100">100</limit_convert_secs> </per_document> <per_view desc="View-specific settings."> diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index 1fb51b513..af756c676 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -175,6 +175,7 @@ std::atomic<unsigned> DocumentBroker::DocBrokerId(1); DocumentBroker::DocumentBroker(const std::string& uri, const Poco::URI& uriPublic, const std::string& docKey) : + _limitLifeSeconds(0), _uriOrig(uri), _uriPublic(uriPublic), _docKey(docKey), @@ -314,6 +315,22 @@ void DocumentBroker::pollThread() continue; } + if (_limitLifeSeconds > 0 && + std::chrono::duration_cast<std::chrono::seconds>(now - _threadStart).count() > _limitLifeSeconds) + { + LOG_WRN("Doc [" << _docKey << "] is taking too long to convert. Will kill process [" + << _childProcess->getPid() << "]. per_document.limit_convert_secs set to " + << _limitLifeSeconds << " secs."); + broadcastMessage("error: cmd=load kind=docexpired"); + + // Brutal but effective. + if (_childProcess) + _childProcess->terminate(); + + stop("Load timed out"); + continue; + } + if (std::chrono::duration_cast<std::chrono::milliseconds> (now - lastBWUpdateTime).count() >= COMMAND_TIMEOUT_MS) { @@ -2181,7 +2198,9 @@ ConvertToBroker::ConvertToBroker(const std::string& uri, const std::string& docKey) : DocumentBroker(uri, uriPublic, docKey) { + static const int limit_convert_secs = LOOLWSD::getConfigValue<int>("per_document.limit_convert_secs", 100); NumConverters++; + _limitLifeSeconds = limit_convert_secs; } void ConvertToBroker::dispose() @@ -2252,11 +2271,14 @@ void DocumentBroker::dumpState(std::ostream& os) os << "\n doc key: " << _docKey; os << "\n doc id: " << _docId; os << "\n num sessions: " << _sessions.size(); + os << "\n thread start: " << Util::getSteadyClockAsString(_threadStart); os << "\n last saved: " << Util::getSteadyClockAsString(_lastSaveTime); os << "\n last save request: " << Util::getSteadyClockAsString(_lastSaveRequestTime); os << "\n last save response: " << Util::getSteadyClockAsString(_lastSaveResponseTime); os << "\n last modifed: " << Util::getHttpTime(_documentLastModifiedTime); os << "\n file last modifed: " << Util::getHttpTime(_lastFileModifiedTime); + if (_limitLifeSeconds) + os << "\n life limit in seconds: " << _limitLifeSeconds; os << "\n idle time: " << getIdleTimeSecs(); os << "\n cursor " << _cursorPosX << ", " << _cursorPosY << "( " << _cursorWidth << "," << _cursorHeight << ")\n"; diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp index 19c88e4c4..3b8f6e844 100644 --- a/wsd/DocumentBroker.hpp +++ b/wsd/DocumentBroker.hpp @@ -443,6 +443,8 @@ private: void getIOStats(uint64_t &sent, uint64_t &recv); protected: + /// Seconds to live for, or 0 forever + int64_t _limitLifeSeconds; std::string _uriOrig; private: const Poco::URI _uriPublic; diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index faa399756..524415b6f 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -835,6 +835,7 @@ void LOOLWSD::initialize(Application& self) { "per_document.limit_file_size_mb", "0" }, { "per_document.limit_num_open_files", "0" }, { "per_document.limit_load_secs", "100" }, + { "per_document.limit_convert_secs", "100" }, { "per_document.limit_stack_mem_kb", "8000" }, { "per_document.limit_virt_mem_mb", "0" }, { "per_document.max_concurrency", "4" }, commit 3ea2122b092648d7e547e8911a4e276ed1247da8 Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Wed Dec 11 22:52:55 2019 +0000 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: improve debugging readme. Change-Id: I4d1933e38c7cb0fd4d28b4384e11f35f2c9e8626 diff --git a/android/README b/android/README index eb34c511b..4606ef3a3 100644 --- a/android/README +++ b/android/README @@ -113,7 +113,8 @@ to setup lldb to actually read & use them. This path contains the non-stripped version of the liblo-native-code.so, and the debugger will read the symbols from that one (even if the APK contains - the stripped version). + the stripped version). *NB* ensure that this is before any internal source + directories - since the internal source contains stripped native code. [Alternatively you can add the following to your ~/.lldbinit instead: @@ -129,6 +130,8 @@ to setup lldb to actually read & use them. From now on, you will be able to debug directly in the Android Studio debugger. Happy debugging! +Note: to re-buld your app with a newly compiled libnative-lo code - it is + == Tip: How to speed up your core.git build == If you use icecream for parallel building, you can use it for commit 28e9548fc880a53358f063d537b8ac72d459feed Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Wed Dec 11 20:32:56 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Removed unused resources. Change-Id: If6175b4703db3d476acc781b9d02c84ca79f7c12 Reviewed-on: https://gerrit.libreoffice.org/84984 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/app/src/main/res/values-tr/strings.xml b/android/app/src/main/res/values-tr/strings.xml index 583fa5313..b50ce64d5 100644 --- a/android/app/src/main/res/values-tr/strings.xml +++ b/android/app/src/main/res/values-tr/strings.xml @@ -1,20 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <string name="app_name">LibreOffice Görüntüleyici</string> - <string name="app_name_settings">LibreOffice Görüntüleyici Ayarları</string> + <string name="app_name_settings">Ayarları</string> - <string name="app_about_name"><b>LibreOffice Görüntüleyici \'Beta\'</b></string> <string name="app_version">Versiyon: %1$s\nBuild ID: %2$s</string> - <string name="app_description">LibreOffice Görüntüleyici LibreOffice tabanlı bir belge görüntüleyicisidir.</string> - <string name="app_credits">https://www.libreoffice.org</string> + <string name="app_description">$APP_NAME LibreOffice tabanlı bir belge görüntüleyicisidir.</string> <string name="app_vendor">Bu sürüm $VENDOR tarafından derlenmiştir.</string> <string name="temp_file_saving_disabled">Bu dosya salt okunabilir haldedir. Kaydetme devredışı.</string> <string name="about_license">Lisansı Görüntüle</string> <string name="about_notice">Bildiriyi Görüntüle</string> <string name="about_moreinfo">Daha Fazla Bilgi</string> - <string name="back_again_to_quit">Çıkış için geri tuşuna tekrar basınız.</string> <string name="new_textdocument">Yeni Kelime İşlemci</string> <string name="new_presentation">Yeni Sunum</string> @@ -22,12 +18,9 @@ <string name="new_drawing">Yeni Çizim</string> <string name="default_document_name">adsız</string> - <string name="browser_app_name">LibreOffice Tarayıcı</string> - <string name="menu_search">Ara</string> <string name="list_view">Liste</string> <string name="grid_view">Grid</string> <string name="filter">Şununla filtrele:</string> - <string name="search_not_found">Söz dizimi bulunamadı.</string> <string name="sort">Şununla sırala:</string> <string name="sort_smallest">Küçükten büyüğe</string> <string name="sort_largest">Büyükten küçüğe</string> @@ -35,27 +28,15 @@ <string name="sort_za">Z-A</string> <string name="sort_oldest">Eskiden yeniye</string> <string name="sort_newest">Yeniden eskiye</string> - <string name="menu_sort_size">Boyuta Göre Sırala</string> - <string name="menu_sort_az">Alfabetik Sırala</string> - <string name="menu_sort_modified">Tarihe Göre Sırala</string> - <string name="menu_preferences">Seçenekler</string> <string name="file_icon_desc">dosya_simgesi</string> <string name="title_recents">Son açılan dosyalar</string> <string name="title_browser">Tüm dosyalar</string> <!-- Pref keys as resources ; Not currently used --> - <string name="EXPLORER_VIEW_TYPE_KEY">EXPLORER_VIEW_TYPE</string> - <string name="CURRENT_DIRECTORY_KEY">CURRENT_DIRECTORY</string> <string name="pref_category_explorer">Dosya Gezgini Ayarları</string> - <string name="pref_category_general">Genel</string> - <string name="pref_experimental_editing">Deneysel Mod</string> - <string name="pref_experimental_editing_summary">Deneysel düzenleme modunu etkinleştirin. Kullanım riski size aittir.</string> <string name="pref_show_hidden_files">Gizli Dosyalar ve Dizinler</string> <string name="pref_show_hidden_files_summary">Gizli dosyalar ve dizinleri göstermeyi etkinleştir.</string> - <string name="pref_developer_mode">Geliştirici Modu</string> - <string name="pref_developer_mode_summary">Geliştirici modunu etkinleştirerek UNO komutları gönderin. Kullanım riski size aittir.</string> <string name="action_about">Hakkında</string> - <string name="action_parts">Bölümler</string> <string name="action_settings">Ayarlar</string> <string name="open">Aç</string> <string name="share">Paylaş</string> @@ -75,48 +56,30 @@ <string name="local_file_system">Yerel dosya sistemi</string> <string name="external_sd_file_system">Harici SD</string> <string name="otg_file_system">OTG cihazı (deneysel)</string> - <string name="owncloud">Uzak sunucu</string> <string name="usb_connected_configure">USB bağlantısı yapıldı, cihazınızın ayarlarını yapınız.</string> - <string name="owncloud_wrong_connection">ownCloud sunucusuna bağlanılamadı. Ayarlarınızı kontrol ediniz.</string> - <string name="owncloud_unauthorized">ownCloud sunucusuna giriş yapılamadı. Ayarlarınızı kontrol ediniz.</string> - <string name="owncloud_unspecified_error">ownCloud sunucusuna bağlanırken belirtilmemiş bir hata oluştu. Lütfen daha sonra tekrar deneyiniz veya ayarlarınızı kontrol ediniz.</string> + <string name="owncloud_wrong_connection">Cloud sunucusuna bağlanılamadı. Ayarlarınızı kontrol ediniz.</string> + <string name="owncloud_unauthorized">Cloud sunucusuna giriş yapılamadı. Ayarlarınızı kontrol ediniz.</string> + <string name="owncloud_unspecified_error">Cloud sunucusuna bağlanırken belirtilmemiş bir hata oluştu. Lütfen daha sonra tekrar deneyiniz veya ayarlarınızı kontrol ediniz.</string> <string name="ext_document_provider_error">Geçersiz dizin. SD kart ayarlarınızı kontrol ediniz.</string> - <string name="legacy_extsd_missing_error">Geçersiz dizin. SD kartınızı veya SD kart ayarlarınızı kontrol ediniz.</string> <string name="otg_missing_error">Geçersiz dizin. OTG cihazınızı veya OTG cihazı ayarlarınızı kontrol ediniz.</string> <!-- Edit action names --> - <string name="action_bold">Kalın</string> - <string name="action_underline">Altı çizgili</string> - <string name="action_italic">Yana yatık</string> - <string name="action_strikeout">Üzeri çizgili</string> - <string name="action_keyboard">Klaveyi göster</string> - <string name="action_save">Kaydet</string> - <string name="action_fromat">Biçimlendirmeyi etkinleştir.</string> - <string name="action_search">Ara</string> - <string name="action_UNO_commands">UNO komutu yolla</string> <!-- Feedback messages --> - <string name="message_saved">Kaydetme tamamlandı.</string> - <string name="message_saving">Belge kaydediliyor…</string> - <string name="message_save_incomplete">Kayıt tamamlanmadı. Değişiklik yapıldı mı?</string> - <string name="create_new_file_success">"Yeni dosya oluşturuldu - "</string> - <string name="create_new_file_error">Yeni dosya oluşturma başarısız. Lütfen dosya ismini kontrol ediniz.</string> <!-- Document provider settings --> <string name="storage_provider_settings">Depolama sağlayıcısı ayarları</string> - <string name="owncloud_settings">ownCloud ayarları</string> + <string name="owncloud_settings">Cloud ayarları</string> <string name="physical_storage_settings">Fiziksel depolama ayarları</string> <string name="external_sd_path">Harici SD yolu</string> <string name="otg_device_path">OTG cihazı yolu</string> <string name="otg_warning">Deneysel özellik: OTG cihazı yazılabilir ise kullanın</string> <string name="server_url">Sunucu URL</string> - <string name="server_url_and_port">ownCloud sunucusu URL ve port</string> + <string name="server_url_and_port">Cloud sunucusu URL ve port</string> <string name="user_name">Kullanıcı Adı</string> <string name="password">Parola</string> - <string name="action_undo">Geri Al</string> - <string name="action_redo">Yinele</string> <!-- Directory browser strings --> <string name="up_description">Üst dizin</string> @@ -128,117 +91,30 @@ <string name="current_dir">Şuan ki dizin: %1$s</string> <!-- Save Alert dialog strings --> - <string name="save_alert_dialog_title">Değişiklikleri kaydetmek istiyor musunuz?</string> - <string name="save_document">Kaydet</string> <string name="action_cancel">İptal</string> - <string name="no_save_document">Hayır</string> <!-- Create New Document Dialog Strings --> <string name="create_new_document_title">Dosya ismi girin</string> <string name="action_create">OLUŞTUR</string> <!-- Presentation Mode Strings --> - <string name="action_presentation">Slayt Gösterisi</string> - <string name="action_add_slide">Slayt Ekle</string> - <string name="alert_copy_svg_slide_show_to_clipboard">Cihazınız uygulama içi slayt gösterisini desteklemiyor. Sunumu panoya kopyaladık. Lütfen ev tuşuna basıp modern bir tarayıcı açıp arama çubuğuna yapıştırın ve sunumu görüntüleyin.</string> - <string name="alert_copy_svg_slide_show_to_clipboard_dismiss">Tamam</string> - <string name="slideshow_action_back">Geri</string> <!-- Calc Header Menu Strings --> - <string name="calc_insert_before">Ekle</string> - <string name="calc_delete">Sil</string> - <string name="calc_hide">Gizle</string> - <string name="calc_show">Göster</string> - <string name="calc_optimal_length">En iyi uzunluk</string> - <string name="calc_adjust_length">Uzunluğu ayarla</string> - <string name="calc_adjust_height">Yüksekliği ayarla</string> - <string name="calc_adjust_width">Genişliği ayarla</string> - <string name="calc_optimal_height">En iyi yükseklikt</string> - <string name="calc_optimal_width">En iyi genişlik</string> - <string name="calc_optimal_length_confirm">Tamam</string> - <string name="calc_optimal_length_default_text">Extra uzunluk giriniz: 100th/mm</string> - <string name="calc_alert_double_click_optimal_length">İpucu: Başlığa çift dokunuş en iyi uzunluk ve genişliği ayarlar.</string> - <string name="action_add_worksheet">Hesap Tablosu Ekle</string> <!-- Password dialog strings --> - <string name="action_pwd_dialog_OK">Tamam</string> - <string name="action_pwd_dialog_cancel">İptal</string> - <string name="action_pwd_dialog_title">Lütfen parola giriniz.</string> <!-- Insert Image Strings --> - <string name="take_photo">Fotoğraf Çek</string> - <string name="select_photo">Fotoğraf Seç</string> - <string name="select_photo_title">Resim Seç</string> - <string name="no_camera_found">Kamera bulunamadı.</string> - <string name="compress_photo_smallest_size">Düşük Kalite</string> - <string name="compress_photo_medium_size">Orta Kalite</string> - <string name="compress_photo_max_quality">Maksimum Kalite</string> - <string name="compress_photo_no_compress">Sıkıştırma yapma</string> - <string name="compress_photo_title">Fotoğrafı sıkıştırmak ister misiniz?</string> <!-- Clipboard Actions --> - <string name="action_copy">Kopyala</string> - <string name="action_paste">Yapıştır</string> - <string name="action_cut">Kes</string> - <string name="action_back">Geri</string> - <string name="action_text_copied">Yazı panoya kopyalandı.</string> - <string name="insert_table">Tablo Ekle</string> - <string name="select_insert_options">Ekleme seçenekleri:</string> - <string name="select_delete_options">Silme seçenekleri:</string> - <string name="action_rename_worksheet">Hesap tablosunu yeniden adlandır</string> - <string name="action_delete_worksheet">Hesap tablosunu sil</string> - <string name="action_delete_slide">Slayt sil</string> - <string name="name_already_used">Girilen isim zaten kullanılıyor.</string> - <string name="part_name_changed">Bölüm ismi değiştirildi.</string> - <string name="part_deleted">Bölüm silindi.</string> - <string-array name="insertrowscolumns"> - <item>Satırları öncekine ekle</item> - <item>Satırları sonrakine ekle</item> - <item>Sütunları öncekine ekle</item> - <item>Sütunları sonrakine ekle</item> - <item>Tablo Ekle</item> - </string-array> - <string-array name="deleterowcolumns"> - <item>Satır Sil</item> - <item>Sütun Sil</item> - <item>Tablo Sil</item> - </string-array> <!-- UNO cmd controller Strings --> - <string name="UNO_commands_string_hint">UNO Komutu</string> - <string name="UNO_commands_string_type_hint">Tip</string> - <string name="UNO_commands_string_value_hint">Değer</string> - <string name="UNO_commands_string_parent_value_hint">Ebeveyn Değeri</string> - <string name="action_exportToPDF">PDF olarak aktar</string> - <string name="action_print">Yazdır</string> - <string name="tabhost_character">Karakter</string> - <string name="tabhost_paragraph">Paragraf</string> - <string name="tabhost_insert">Ekle</string> - <string name="tabhost_style">Biçim</string> - <string name="alert_ok">Tamam</string> - <string name="alert_cancel">İptal</string> <string name="unable_to_go_further">Daha fazla ilerlenemiyor.</string> - <string name="current_uno_command">Şuan ki UNO komutu</string> <string name="pref_sort_summary">Dosyaların nasıl sıralanacağını seçiniz. A-Z, Z-A ya da boyuta göre.</string> <string name="pref_viewmode_summary">Dosyaları grid veya liste şeklinde görüntüle.</string> <string name="pref_file_explorer_title">Dosya Gezgini</string> <string name="pref_sort_title">Dosya Sıralaması</string> <string name="pref_filter_title">Varsayılan Dosya Filtrelemesi</string> <string name="pref_filter_summary">Varsayılan dosya filtrelemesini seç</string> - <string name="display_language">Uygulama Dili</string> - <string name="display_language_summary">Varsayılan dili değiştir</string> - <string name="unable_to_export_pdf">Pdf dışa aktarılamıyor.</string> - <string name="pdf_exported_at">Şu konumda pdf'e aktarıldı: </string> - <string name="printing_not_supported">Cihazınız yazdırmayı desteklemiyor.</string> - <string name="error">Hata</string> - <string name="enter_part_name">Bölüm ismi girin.</string> <string name="bmp_null">Bmp boş!</string> <string name="directory_not_saved">Dizin kaydedilmedi.</string> - <string name="page">Sayfa</string> - <string name="sheet">Tablo</string> - <string name="slide">Slayt</string> - <string name="part">Bölüm</string> - <string name="highlight_color">Vurgulama Rengi</string> - <string name="font_color">Metin Rengi</string> - <string name="action_rename_slide">Slaytı yeniden adlandır</string> </resources> commit 7a2cc68a0bf939d3771932dbaedbed4d67dc3855 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Wed Dec 11 20:25:22 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Turkish shell translations copied over from core.git. Change-Id: If74644bdf2460f2fd2a8346b84333340d4acc7c9 Reviewed-on: https://gerrit.libreoffice.org/84983 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/app/src/main/res/values-tr/strings.xml b/android/app/src/main/res/values-tr/strings.xml new file mode 100644 index 000000000..583fa5313 --- /dev/null +++ b/android/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <string name="app_name">LibreOffice Görüntüleyici</string> + <string name="app_name_settings">LibreOffice Görüntüleyici Ayarları</string> + + <string name="app_about_name"><b>LibreOffice Görüntüleyici \'Beta\'</b></string> + <string name="app_version">Versiyon: %1$s\nBuild ID: %2$s</string> + <string name="app_description">LibreOffice Görüntüleyici LibreOffice tabanlı bir belge görüntüleyicisidir.</string> + <string name="app_credits">https://www.libreoffice.org</string> + <string name="app_vendor">Bu sürüm $VENDOR tarafından derlenmiştir.</string> + <string name="temp_file_saving_disabled">Bu dosya salt okunabilir haldedir. Kaydetme devredışı.</string> + + <string name="about_license">Lisansı Görüntüle</string> + <string name="about_notice">Bildiriyi Görüntüle</string> + <string name="about_moreinfo">Daha Fazla Bilgi</string> + <string name="back_again_to_quit">Çıkış için geri tuşuna tekrar basınız.</string> + + <string name="new_textdocument">Yeni Kelime İşlemci</string> + <string name="new_presentation">Yeni Sunum</string> + <string name="new_spreadsheet">Yeni Hesap Tablosu</string> + <string name="new_drawing">Yeni Çizim</string> + <string name="default_document_name">adsız</string> + + <string name="browser_app_name">LibreOffice Tarayıcı</string> + <string name="menu_search">Ara</string> + <string name="list_view">Liste</string> + <string name="grid_view">Grid</string> + <string name="filter">Şununla filtrele:</string> + <string name="search_not_found">Söz dizimi bulunamadı.</string> + <string name="sort">Şununla sırala:</string> + <string name="sort_smallest">Küçükten büyüğe</string> + <string name="sort_largest">Büyükten küçüğe</string> + <string name="sort_az">A-Z</string> + <string name="sort_za">Z-A</string> + <string name="sort_oldest">Eskiden yeniye</string> + <string name="sort_newest">Yeniden eskiye</string> + <string name="menu_sort_size">Boyuta Göre Sırala</string> + <string name="menu_sort_az">Alfabetik Sırala</string> + <string name="menu_sort_modified">Tarihe Göre Sırala</string> + <string name="menu_preferences">Seçenekler</string> + <string name="file_icon_desc">dosya_simgesi</string> + <string name="title_recents">Son açılan dosyalar</string> + <string name="title_browser">Tüm dosyalar</string> + <!-- Pref keys as resources ; Not currently used --> + <string name="EXPLORER_VIEW_TYPE_KEY">EXPLORER_VIEW_TYPE</string> + <string name="CURRENT_DIRECTORY_KEY">CURRENT_DIRECTORY</string> + <string name="pref_category_explorer">Dosya Gezgini Ayarları</string> + <string name="pref_category_general">Genel</string> + <string name="pref_experimental_editing">Deneysel Mod</string> + <string name="pref_experimental_editing_summary">Deneysel düzenleme modunu etkinleştirin. Kullanım riski size aittir.</string> + <string name="pref_show_hidden_files">Gizli Dosyalar ve Dizinler</string> + <string name="pref_show_hidden_files_summary">Gizli dosyalar ve dizinleri göstermeyi etkinleştir.</string> + <string name="pref_developer_mode">Geliştirici Modu</string> + <string name="pref_developer_mode_summary">Geliştirici modunu etkinleştirerek UNO komutları gönderin. Kullanım riski size aittir.</string> + + <string name="action_about">Hakkında</string> + <string name="action_parts">Bölümler</string> + <string name="action_settings">Ayarlar</string> + <string name="open">Aç</string> + <string name="share">Paylaş</string> + <string name="share_via">Şununla paylaş</string> + + <!-- Document browser filters --> + <string name="filter_everything">Hepsi</string> + <string name="filter_documents">Kelime İşlemci</string> + <string name="filter_spreadsheets">Hesap Tablosu</string> + <string name="filter_presentations">Sunum</string> + <string name="filter_drawings">Çizimler</string> + + <!-- Document provider names --> + <string name="document_locations">Belge dizinleri</string> + <string name="close_document_locations">Belge dizinlerini kapat</string> + <string name="local_documents">Belgeler</string> + <string name="local_file_system">Yerel dosya sistemi</string> + <string name="external_sd_file_system">Harici SD</string> + <string name="otg_file_system">OTG cihazı (deneysel)</string> + <string name="owncloud">Uzak sunucu</string> + <string name="usb_connected_configure">USB bağlantısı yapıldı, cihazınızın ayarlarını yapınız.</string> + + <string name="owncloud_wrong_connection">ownCloud sunucusuna bağlanılamadı. Ayarlarınızı kontrol ediniz.</string> + <string name="owncloud_unauthorized">ownCloud sunucusuna giriş yapılamadı. Ayarlarınızı kontrol ediniz.</string> + <string name="owncloud_unspecified_error">ownCloud sunucusuna bağlanırken belirtilmemiş bir hata oluştu. Lütfen daha sonra tekrar deneyiniz veya ayarlarınızı kontrol ediniz.</string> + + <string name="ext_document_provider_error">Geçersiz dizin. SD kart ayarlarınızı kontrol ediniz.</string> + <string name="legacy_extsd_missing_error">Geçersiz dizin. SD kartınızı veya SD kart ayarlarınızı kontrol ediniz.</string> + <string name="otg_missing_error">Geçersiz dizin. OTG cihazınızı veya OTG cihazı ayarlarınızı kontrol ediniz.</string> + + <!-- Edit action names --> + <string name="action_bold">Kalın</string> + <string name="action_underline">Altı çizgili</string> + <string name="action_italic">Yana yatık</string> + <string name="action_strikeout">Üzeri çizgili</string> + <string name="action_keyboard">Klaveyi göster</string> + <string name="action_save">Kaydet</string> + <string name="action_fromat">Biçimlendirmeyi etkinleştir.</string> + <string name="action_search">Ara</string> + <string name="action_UNO_commands">UNO komutu yolla</string> + + <!-- Feedback messages --> + <string name="message_saved">Kaydetme tamamlandı.</string> + <string name="message_saving">Belge kaydediliyor…</string> + <string name="message_save_incomplete">Kayıt tamamlanmadı. Değişiklik yapıldı mı?</string> + <string name="create_new_file_success">"Yeni dosya oluşturuldu - "</string> + <string name="create_new_file_error">Yeni dosya oluşturma başarısız. Lütfen dosya ismini kontrol ediniz.</string> + + <!-- Document provider settings --> + <string name="storage_provider_settings">Depolama sağlayıcısı ayarları</string> + <string name="owncloud_settings">ownCloud ayarları</string> + <string name="physical_storage_settings">Fiziksel depolama ayarları</string> + <string name="external_sd_path">Harici SD yolu</string> + <string name="otg_device_path">OTG cihazı yolu</string> + <string name="otg_warning">Deneysel özellik: OTG cihazı yazılabilir ise kullanın</string> + <string name="server_url">Sunucu URL</string> + <string name="server_url_and_port">ownCloud sunucusu URL ve port</string> + <string name="user_name">Kullanıcı Adı</string> + <string name="password">Parola</string> + <string name="action_undo">Geri Al</string> + <string name="action_redo">Yinele</string> + + <!-- Directory browser strings --> + <string name="up_description">Üst dizin</string> + <string name="confirm_label">Onayla</string> + <string name="cancel_label">İptal</string> + <string name="search_label">Git</string> + <string name="directory_browser_label">Dizin Seç</string> + <string name="bad_directory">Geçersiz dizin</string> + <string name="current_dir">Şuan ki dizin: %1$s</string> + + <!-- Save Alert dialog strings --> + <string name="save_alert_dialog_title">Değişiklikleri kaydetmek istiyor musunuz?</string> + <string name="save_document">Kaydet</string> + <string name="action_cancel">İptal</string> + <string name="no_save_document">Hayır</string> + + <!-- Create New Document Dialog Strings --> + <string name="create_new_document_title">Dosya ismi girin</string> + <string name="action_create">OLUŞTUR</string> + + <!-- Presentation Mode Strings --> + <string name="action_presentation">Slayt Gösterisi</string> + <string name="action_add_slide">Slayt Ekle</string> + <string name="alert_copy_svg_slide_show_to_clipboard">Cihazınız uygulama içi slayt gösterisini desteklemiyor. Sunumu panoya kopyaladık. Lütfen ev tuşuna basıp modern bir tarayıcı açıp arama çubuğuna yapıştırın ve sunumu görüntüleyin.</string> + <string name="alert_copy_svg_slide_show_to_clipboard_dismiss">Tamam</string> + <string name="slideshow_action_back">Geri</string> + + <!-- Calc Header Menu Strings --> + <string name="calc_insert_before">Ekle</string> + <string name="calc_delete">Sil</string> + <string name="calc_hide">Gizle</string> + <string name="calc_show">Göster</string> + <string name="calc_optimal_length">En iyi uzunluk</string> + <string name="calc_adjust_length">Uzunluğu ayarla</string> + <string name="calc_adjust_height">Yüksekliği ayarla</string> + <string name="calc_adjust_width">Genişliği ayarla</string> + <string name="calc_optimal_height">En iyi yükseklikt</string> + <string name="calc_optimal_width">En iyi genişlik</string> + <string name="calc_optimal_length_confirm">Tamam</string> + <string name="calc_optimal_length_default_text">Extra uzunluk giriniz: 100th/mm</string> + <string name="calc_alert_double_click_optimal_length">İpucu: Başlığa çift dokunuş en iyi uzunluk ve genişliği ayarlar.</string> + <string name="action_add_worksheet">Hesap Tablosu Ekle</string> + + <!-- Password dialog strings --> + <string name="action_pwd_dialog_OK">Tamam</string> + <string name="action_pwd_dialog_cancel">İptal</string> + <string name="action_pwd_dialog_title">Lütfen parola giriniz.</string> + + <!-- Insert Image Strings --> + <string name="take_photo">Fotoğraf Çek</string> + <string name="select_photo">Fotoğraf Seç</string> + <string name="select_photo_title">Resim Seç</string> + <string name="no_camera_found">Kamera bulunamadı.</string> + <string name="compress_photo_smallest_size">Düşük Kalite</string> + <string name="compress_photo_medium_size">Orta Kalite</string> + <string name="compress_photo_max_quality">Maksimum Kalite</string> + <string name="compress_photo_no_compress">Sıkıştırma yapma</string> + <string name="compress_photo_title">Fotoğrafı sıkıştırmak ister misiniz?</string> + + <!-- Clipboard Actions --> + <string name="action_copy">Kopyala</string> + <string name="action_paste">Yapıştır</string> + <string name="action_cut">Kes</string> + <string name="action_back">Geri</string> + <string name="action_text_copied">Yazı panoya kopyalandı.</string> + <string name="insert_table">Tablo Ekle</string> + <string name="select_insert_options">Ekleme seçenekleri:</string> + <string name="select_delete_options">Silme seçenekleri:</string> + <string name="action_rename_worksheet">Hesap tablosunu yeniden adlandır</string> + <string name="action_delete_worksheet">Hesap tablosunu sil</string> + <string name="action_delete_slide">Slayt sil</string> + <string name="name_already_used">Girilen isim zaten kullanılıyor.</string> + <string name="part_name_changed">Bölüm ismi değiştirildi.</string> + <string name="part_deleted">Bölüm silindi.</string> + <string-array name="insertrowscolumns"> + <item>Satırları öncekine ekle</item> + <item>Satırları sonrakine ekle</item> + <item>Sütunları öncekine ekle</item> + <item>Sütunları sonrakine ekle</item> + <item>Tablo Ekle</item> + </string-array> + <string-array name="deleterowcolumns"> + <item>Satır Sil</item> + <item>Sütun Sil</item> + <item>Tablo Sil</item> + </string-array> + + <!-- UNO cmd controller Strings --> + <string name="UNO_commands_string_hint">UNO Komutu</string> + <string name="UNO_commands_string_type_hint">Tip</string> + <string name="UNO_commands_string_value_hint">Değer</string> + <string name="UNO_commands_string_parent_value_hint">Ebeveyn Değeri</string> + <string name="action_exportToPDF">PDF olarak aktar</string> + <string name="action_print">Yazdır</string> + <string name="tabhost_character">Karakter</string> + <string name="tabhost_paragraph">Paragraf</string> + <string name="tabhost_insert">Ekle</string> + <string name="tabhost_style">Biçim</string> + <string name="alert_ok">Tamam</string> + <string name="alert_cancel">İptal</string> + <string name="unable_to_go_further">Daha fazla ilerlenemiyor.</string> + <string name="current_uno_command">Şuan ki UNO komutu</string> + <string name="pref_sort_summary">Dosyaların nasıl sıralanacağını seçiniz. A-Z, Z-A ya da boyuta göre.</string> + <string name="pref_viewmode_summary">Dosyaları grid veya liste şeklinde görüntüle.</string> + <string name="pref_file_explorer_title">Dosya Gezgini</string> + <string name="pref_sort_title">Dosya Sıralaması</string> + <string name="pref_filter_title">Varsayılan Dosya Filtrelemesi</string> + <string name="pref_filter_summary">Varsayılan dosya filtrelemesini seç</string> + <string name="display_language">Uygulama Dili</string> + <string name="display_language_summary">Varsayılan dili değiştir</string> + <string name="unable_to_export_pdf">Pdf dışa aktarılamıyor.</string> + <string name="pdf_exported_at">Şu konumda pdf'e aktarıldı: </string> + <string name="printing_not_supported">Cihazınız yazdırmayı desteklemiyor.</string> + <string name="error">Hata</string> + <string name="enter_part_name">Bölüm ismi girin.</string> + <string name="bmp_null">Bmp boş!</string> + <string name="directory_not_saved">Dizin kaydedilmedi.</string> + <string name="page">Sayfa</string> + <string name="sheet">Tablo</string> + <string name="slide">Slayt</string> + <string name="part">Bölüm</string> + <string name="highlight_color">Vurgulama Rengi</string> + <string name="font_color">Metin Rengi</string> + <string name="action_rename_slide">Slaytı yeniden adlandır</string> +</resources> commit 0bc255dddb339cca4e9f5735cc1c5cebaf3980a3 Author: Pedro Pinto Silva <pedro.si...@collabora.com> AuthorDate: Wed Dec 11 20:23:01 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Brazil Portuguese translations of the lib. Change-Id: I587a69518d23c7f2a7580918610619bd78821754 Reviewed-on: https://gerrit.libreoffice.org/84982 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/lib/src/main/res/values-pt-rBR/strings.xml b/android/lib/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000..4e668e628 --- /dev/null +++ b/android/lib/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,10 @@ +<resources> + <string name="temp_file_saving_disabled">Este documento é apenas de leitura, salvaguardar está desabilitado.</string> + <string name="storage_permission_required">Permissão de armazenamento é requirida</string> + <string name="failed_to_load_file">Falha no carregamento do documento</string> + <string name="failed_to_insert_image">Falha ao inserir imagem</string> + <string name="cannot_open_file_chooser">Não foi possível abrir o gestor de arquivos</string> + + <!-- Loading SlideShow Dialog Strings --> + <string name="loading">Carregando...</string> +</resources> commit a9ba89ab9a2821dd9beac8faa380fade9fe3c821 Author: Eloy Crespo <eloy.cre...@collabora.com> AuthorDate: Wed Dec 11 20:22:08 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Spanish translations of the lib. Change-Id: I8fc84c9d406a2cd7be840ec2f6e09a9869e8e157 Reviewed-on: https://gerrit.libreoffice.org/84981 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/lib/src/main/res/values-es/strings.xml b/android/lib/src/main/res/values-es/strings.xml new file mode 100644 index 000000000..c488031e1 --- /dev/null +++ b/android/lib/src/main/res/values-es/strings.xml @@ -0,0 +1,10 @@ +<resources> + <string name="temp_file_saving_disabled">Este archivo es de solo lectura, el guardado está deshabilitado.</string> + <string name="storage_permission_required">Se requiere permiso de almacenamiento</string> + <string name="failed_to_load_file">Error al determinar el archivo a cargar</string> + <string name="failed_to_insert_image">Error al insertar imagen</string> + <string name="cannot_open_file_chooser">No se puede abrir el selector de archivos</string> + + <!-- Loading SlideShow Dialog Strings --> + <string name="loading">Cargando...</string> +</resources> commit 668a48976679e64fff4ee0455e8fcbb9f6627faf Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Wed Dec 11 20:13:49 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Honor the languge setting from the system. Makes no sense to have an own language switching mechanism in the app... Change-Id: Ic19bf36e35d1d011a1cd96c17b713e41577c512e Reviewed-on: https://gerrit.libreoffice.org/84980 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java b/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java index 22594f665..382943ea4 100644 --- a/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java +++ b/android/app/src/main/java/org/libreoffice/androidapp/LibreOfficeApplication.java @@ -26,11 +26,6 @@ public class LibreOfficeApplication extends Application { return mainHandler; } - - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(LocaleHelper.onAttach(base, "en")); - } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java b/android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java deleted file mode 100644 index 308f3b8fc..000000000 --- a/android/app/src/main/java/org/libreoffice/androidapp/LocaleHelper.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * 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/. - */ - -package org.libreoffice.androidapp; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Build; -import android.preference.PreferenceManager; - -import java.util.Locale; - -public class LocaleHelper { - - private static final String SELECTED_LANG = "org.libreoffice.selected.lang"; - - public static Context onAttach(Context context){ - String lang = getPersistedData(context, Locale.getDefault().getLanguage()); - return setLocale(context, lang); - } - - public static Context onAttach(Context context, String defLang){ - String lang = getPersistedData(context, defLang); - return setLocale(context, lang); - } - - public static Context setLocale(Context context, String lang) { - persist(context, lang); - return updateResources(context, lang); - } - - @SuppressWarnings("deprecation") - private static Context updateResources(Context context, String lang) { - Locale locale = new Locale(lang); - Locale.setDefault(locale); - - Resources res = context.getResources(); - Configuration cfg = res.getConfiguration(); - cfg.locale = locale; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) - cfg.setLayoutDirection(locale); - - res.updateConfiguration(cfg, res.getDisplayMetrics()); - return context; - } - - private static void persist(Context context, String lang) { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - preferences.edit().putString(SELECTED_LANG, lang); - preferences.edit().apply(); - } - - private static String getPersistedData(Context context, String lang) { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - return preferences.getString(SELECTED_LANG, lang); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java index 75cd9468c..c51d098af 100644 --- a/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java +++ b/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java @@ -53,9 +53,6 @@ public class SettingsActivity extends AppCompatActivity { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { SettingsListenerModel.getInstance().changePreferenceState(sharedPreferences, key); - if (key.equals("DISPLAY_LANGUAGE")) { - getActivity().recreate(); - } } } } diff --git a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java index e0c056862..167ae17c1 100644 --- a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java +++ b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java @@ -59,7 +59,6 @@ import com.google.android.material.navigation.NavigationView; import org.libreoffice.androidapp.AboutDialogFragment; import org.libreoffice.androidapp.LibreOfficeApplication; -import org.libreoffice.androidapp.LocaleHelper; import org.libreoffice.androidapp.R; import org.libreoffice.androidapp.SettingsActivity; import org.libreoffice.androidapp.SettingsListenerModel; @@ -107,7 +106,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings private int viewMode; private int sortMode; private boolean showHiddenFiles; - private String displayLanguage; // dynamic permissions IDs private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0; @@ -132,7 +130,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings public static final String SORT_MODE_KEY = "SORT_MODE"; private static final String RECENT_DOCUMENTS_KEY = "RECENT_DOCUMENTS"; private static final String ENABLE_SHOW_HIDDEN_FILES_KEY = "ENABLE_SHOW_HIDDEN_FILES"; - private static final String DISPLAY_LANGUAGE = "DISPLAY_LANGUAGE"; public static final String NEW_FILE_PATH_KEY = "NEW_FILE_PATH_KEY"; public static final String NEW_DOC_TYPE_KEY = "NEW_DOC_TYPE_KEY"; @@ -200,11 +197,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings fabCloseAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_close); } - @Override - protected void attachBaseContext(Context newBase) { - super.attachBaseContext(LocaleHelper.onAttach(newBase, "en")); - } - public void createUI() { setContentView(R.layout.activity_document_browser); @@ -940,7 +932,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings viewMode = Integer.valueOf(defaultPrefs.getString(EXPLORER_VIEW_TYPE_KEY, "" + GRID_VIEW)); filterMode = Integer.valueOf(defaultPrefs.getString(FILTER_MODE_KEY, "-1")); showHiddenFiles = defaultPrefs.getBoolean(ENABLE_SHOW_HIDDEN_FILES_KEY, false); - displayLanguage = defaultPrefs.getString(DISPLAY_LANGUAGE, "en"); Intent i = this.getIntent(); if (i.hasExtra(CURRENT_DIRECTORY_KEY)) { @@ -962,8 +953,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings viewMode = i.getIntExtra(EXPLORER_VIEW_TYPE_KEY, GRID_VIEW); Log.d(LOGTAG, EXPLORER_VIEW_TYPE_KEY); } - - LocaleHelper.setLocale(this, displayLanguage); } diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml index 65d991201..97ec41002 100644 --- a/android/app/src/main/res/values-es/strings.xml +++ b/android/app/src/main/res/values-es/strings.xml @@ -25,8 +25,6 @@ <string name="pref_sort_title">Orden de Archivos</string> <string name="pref_filter_title">Filtro de Archivos Predeterminado</string> <string name="pref_filter_summary">Establezca quçe filstro de archivo debe usarse de manera predeterminada.</string> - <string name="display_language">Idioma de visualización</string> - <string name="display_language_summary">Establecer el idioma de visualización predeterminado</string> <string name="pref_show_debug_info">Mostrar información de depuración</string> <string name="pref_show_debug_info_summary">Habilite para mostrar información de depuración en el visor de documentos</string> diff --git a/android/app/src/main/res/values-pt-rBR/strings.xml b/android/app/src/main/res/values-pt-rBR/strings.xml index d0add44cc..2f2635506 100644 --- a/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/android/app/src/main/res/values-pt-rBR/strings.xml @@ -25,8 +25,6 @@ <string name="pref_sort_title">Ordem padrão</string> <string name="pref_filter_title">Filtro padrão</string> <string name="pref_filter_summary">Defina qual o filtro de arquivo que deve ser usado por padrão.</string> - <string name="display_language">Mostrar idioma</string> - <string name="display_language_summary">Defina qual o idioma que deve ser usado por padrão</string> <string name="pref_show_debug_info">Mostrar info de depuração </string> <string name="pref_show_debug_info_summary">Habilitar info de depuração no document viewer</string> @@ -141,5 +139,5 @@ <string name="unable_to_go_further">Não foi possível ir mais longe.</string> <string name="bmp_null">Bmp é nulo!</string> <string name="directory_not_saved">Diretório não salvo.</string> - <string name="title_activity_show_html">sobre</string> + <string name="title_activity_show_html">Sobre</string> </resources> diff --git a/android/app/src/main/res/values/arrays.xml b/android/app/src/main/res/values/arrays.xml index 7adfbd56d..6c7e94b08 100644 --- a/android/app/src/main/res/values/arrays.xml +++ b/android/app/src/main/res/values/arrays.xml @@ -8,10 +8,6 @@ <item >2</item> <item >3</item> </string-array> - <string-array name="SupportedLanguagesValues"> - <item >en</item> - <!-- FIXME we need more languages item >tr</item--> - </string-array> <string-array name="SortModeStringValues"> <item >0</item> <item >1</item> @@ -36,10 +32,6 @@ <item>@string/filter_presentations</item> <item>@string/filter_drawings</item> </string-array> - <string-array name="SupportedLanguages"> - <item>English</item> - <!-- FIXME we need more languages item>Turkçe</item--> - </string-array> <string-array name="SortModeNames"> <item >@string/sort_az</item> <item >@string/sort_za</item> diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index bf434e74d..082374b38 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -25,8 +25,6 @@ <string name="pref_sort_title">File Order</string> <string name="pref_filter_title">Default File Filter</string> <string name="pref_filter_summary">Set which file filter should be used by default.</string> - <string name="display_language">Display Language</string> - <string name="display_language_summary">Set the default display language</string> <string name="pref_show_debug_info">Show Debug Info</string> <string name="pref_show_debug_info_summary">Enable to show debug information in document viewer</string> diff --git a/android/app/src/main/res/xml/libreoffice_preferences.xml b/android/app/src/main/res/xml/libreoffice_preferences.xml index 8090a98eb..5f8389d45 100644 --- a/android/app/src/main/res/xml/libreoffice_preferences.xml +++ b/android/app/src/main/res/xml/libreoffice_preferences.xml @@ -30,15 +30,6 @@ android:summary="@string/pref_viewmode_summary" app:iconSpaceReserved="false" /> - <ListPreference - android:title="@string/display_language" - android:summary="@string/display_language_summary" - android:entries="@array/SupportedLanguages" - android:entryValues="@array/SupportedLanguagesValues" - android:defaultValue="en" - android:key="DISPLAY_LANGUAGE" - app:iconSpaceReserved="false" /> - <CheckBoxPreference android:title="@string/pref_show_hidden_files" android:key="ENABLE_SHOW_HIDDEN_FILES" commit e9cf61ad99b2415a253304fc54efe83d2f321ce1 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Wed Dec 11 20:12:45 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Fix build after the recent Nextcloud's android-library update. Thanks Tobi for the hint! Change-Id: I00b7ef4aaef7ced1d26d3d5636189e239897ecea Reviewed-on: https://gerrit.libreoffice.org/84979 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/app/build.gradle b/android/app/build.gradle index 84f5ef91c..158ea2ddf 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -5,11 +5,13 @@ apply from: 'appSettings.gradle' android { compileSdkVersion 28 + defaultConfig { // applicationId, versionCode and versionName are defined in appSettings.gradle minSdkVersion 21 targetSdkVersion 28 } + buildTypes { debug { resValue "string", "app_name", "${liboAppName} Debug" @@ -40,6 +42,11 @@ android { 'proguard-rules.pro' } } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } repositories { @@ -54,7 +61,9 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'com.google.android.material:material:1.1.0-alpha04' + implementation 'com.github.nextcloud:android-library:-SNAPSHOT' + implementation "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2 //before changing the version please see https://issuetracker.google.com/issues/111662669 implementation 'androidx.preference:preference:1.1.0-alpha01' commit fb72c1353af80ec8cd961504e22890aabafe86cf Author: Pedro Pinto Silva <pedro.si...@collabora.com> AuthorDate: Wed Dec 11 14:53:09 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Brazilian Portuguese translations of the shell. Change-Id: Ib71ccb7281e3e27c3184d3487b56253c61f2bc2a Reviewed-on: https://gerrit.libreoffice.org/84978 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/app/src/main/res/values-pt-rBR/strings.xml b/android/app/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000..d0add44cc --- /dev/null +++ b/android/app/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,145 @@ +<resources> + <!--string name="app_name" definition is deliberately missing here, it is filled in in build.gradle.--> + + <string name="app_name_settings">Configurações</string> + <string name="app_version">Version: %1$s, Build ID: %2$s</string> + <string name="app_description">$APP_NAME é uma moderna suíte de produtividade para processamento de texto, folhas de cálculo e apresentações, de fácil utilização, e open source.</string> + <string name="app_vendor">Esta versão foi fornecida por $VENDOR.</string> + + <string name="no_recent_items">Nenhum item recente</string> + <string name="no_items">Nenhum item</string> + <string name="temp_file_saving_disabled">Este documento é apenas de leitura, salvaguardar está desabilitado.</string> + <string name="file_exists_warning">Um ficheiro com o mesmo nome já existe, e será substituído.</string> + <string name="file_creation_failed">Falha na criação do documento</string> + <string name="storage_permission_required">Permissão de armazenamento é requirida</string> + <string name="failed_to_load_file">Falha no carregamento do documento</string> + + <string name="list_view">Lista</string> + <string name="grid_view">Grelha</string> + <string name="pref_category_explorer">Configurações do gestor de arquivos</string> + <string name="pref_show_hidden_files">Arquivos/pastas ocultas</string> + <string name="pref_show_hidden_files_summary">Mostrar arquivos/pastas ocultas</string> + <string name="pref_sort_summary">Ordenar arquivos por: A-Z, Tamanho ou por data.</string> + <string name="pref_viewmode_summary">Ver arquivos em grelha ou em list.</string> + <string name="pref_file_explorer_title">Layout do gestor de arquivos</string> + <string name="pref_sort_title">Ordem padrão</string> + <string name="pref_filter_title">Filtro padrão</string> + <string name="pref_filter_summary">Defina qual o filtro de arquivo que deve ser usado por padrão.</string> + <string name="display_language">Mostrar idioma</string> + <string name="display_language_summary">Defina qual o idioma que deve ser usado por padrão</string> + <string name="pref_show_debug_info">Mostrar info de depuração </string> + <string name="pref_show_debug_info_summary">Habilitar info de depuração no document viewer</string> + + <string name="about_license">Mostrar Licença</string> + <string name="about_notice">Mostar aviso</string> + <string name="about_moreinfo">Mais informação</string> + + <string name="new_textdocument">Novo documento de texto</string> + <string name="new_presentation">Nova apresentação </string> + <string name="new_spreadsheet">Nova folha de cálculo</string> + <string name="new_drawing">Novo desenho</string> + <string name="default_document_name">Sem nome</string> + + <string name="filter">Filtrado por</string> + <string name="sort">Ordenado por</string> + <string name="sort_smallest">Mais pequeno primeiro</string> + <string name="sort_largest">Maior em primeiro lugar</string> + <string name="sort_az">A-Z</string> + <string name="sort_za">Z-A</string> + <string name="sort_oldest">Mais antigo em primeiro</string> + <string name="sort_newest">Recentes em primeiro</string> + <string name="file_icon_desc">Ícone de arquivo</string> + <string name="title_recents">Arquivos recentes</string> + <string name="title_browser">Todos os arquivos</string> + <!-- Pref keys as resources ; Not currently used --> + + <string name="action_about">Sobre</string> + <string name="action_settings">Configurações</string> + <string name="open">Abir</string> + <string name="share">Partilhar</string> + <string name="share_via">Partilhar via</string> + + <!-- Document browser filters --> + <string name="filter_everything">Tudo</string> + <string name="filter_documents">Documentos</string> + <string name="filter_spreadsheets">Folhas de cálculo</string> + <string name="filter_presentations">Apresentações</string> + <string name="filter_drawings">Desehnhos</string> + + <!-- Document provider names --> + <string name="document_locations">Locais de arquivos</string> + <string name="close_document_locations">Fechar Locais de arquivos</string> + <string name="local_documents">Diretorias de documentos</string> + <string name="local_file_system">Sistema local de arquivos</string> + <string name="external_sd_file_system">SD externo</string> + <string name="otg_file_system">Dispositivo OTG (experimental)</string> + <string name="remote_server">Servidor remoto</string> + <string name="usb_connected_configure">USB conetado, configure o seu dispositivo.</string> + + <string name="owncloud_wrong_connection">Falha na conexão com o seu servidor na nuvem. Verifique as suas configurações.</string> + <string name="owncloud_unauthorized">Falha na autenticação com o seu servidor na nuvem. Verifique as suas configurações.</string> + <string name="owncloud_unspecified_error">Erro ao conetar com o seu servidor na nuvem. Verifique as suas configurações.</string> + + <string name="ext_document_provider_error">Arquivo raiz inválido. Verifique a configuração do seu cartão SD.</string> + <string name="otg_missing_error">Arquivo raiz inválido. Verifique seu dispositivo OTG e/ou configuração.</string> + + <!-- Edit action names --> + + <!-- Feedback messages --> + + <!-- Document provider settings --> + <string name="storage_provider_settings">Configurações do provedor de armazenamento</string> + <string name="owncloud_settings">Configurações do servidor na nuvem</string> + <string name="physical_storage_settings">Configurações de armazenamento físico</string> + <string name="external_sd_path">Caminho SD externo</string> + <string name="otg_device_path">Caminho do dispositivo OTG</string> + <string name="otg_warning">Recurso experimental: use somente se o dispositivo OTG for gravável.</string> + <string name="server_url">URL de servidor</string> + <string name="server_url_and_port">URL e porta do servidor na nuvem.</string> + <string name="user_name">Usuário</string> + <string name="password">Senha</string> + + <!-- Directory browser strings --> + <string name="up_description">Ir para um diretório acima</string> + <string name="confirm_label">Confirmar</string> + <string name="cancel_label">Cancelar</string> + <string name="search_label">Ir</string> + <string name="directory_browser_label">Escolha Diretório</string> + <string name="bad_directory">Caminho de diretório inválido</string> + <string name="current_dir">Diretório atual: %1$s</string> + + <!-- Permission rationale alert dialog strings --> + <string name="title_permission_required">Permissão necessária</string> + <string name="reason_required_to_read_documents">É necessária permissão de armazenamento para ler seus documentos.</string> + <string name="positive_ok">OK</string> + <string name="negative_im_sure">Tenho a certeza</string> + <string name="negative_cancel">Cancelar</string> + + <!-- Save Alert dialog strings --> + <string name="action_cancel">Cancelar</string> + + <!-- Create New Document Dialog Strings --> + <string name="create_new_document_title">Criar novo documento</string> + <string name="enter_filename">Introduza o nome do arquivo:</string> + <string name="action_create">Criar</string> + <string name="action_overwrite">Substituir</string> + + <!-- Loading SlideShow Dialog Strings --> + <string name="loading">Carregando...</string> + + <!-- Presentation Mode Strings --> + + <!-- Calc Header Menu Strings --> + + <!-- Password dialog strings --> + + <!-- Insert Image Strings --> + + <!-- Clipboard Actions --> + + <!-- UNO cmd controller Strings --> + <string name="unable_to_go_further">Não foi possível ir mais longe.</string> + <string name="bmp_null">Bmp é nulo!</string> + <string name="directory_not_saved">Diretório não salvo.</string> + <string name="title_activity_show_html">sobre</string> +</resources> diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 8a2aa4d7b..bf434e74d 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -16,12 +16,12 @@ <string name="list_view">List</string> <string name="grid_view">Grid</string> - <string name="pref_category_explorer">File Explorer Settings</string> + <string name="pref_category_explorer">File Manager Settings</string> <string name="pref_show_hidden_files">Hidden Files/Folders</string> <string name="pref_show_hidden_files_summary">Enable to show hidden files/folders</string> <string name="pref_sort_summary">Select how to order files: A-Z, by size or by date.</string> <string name="pref_viewmode_summary">View files as a grid or in a list.</string> - <string name="pref_file_explorer_title">File explorer layout</string> + <string name="pref_file_explorer_title">File manager layout</string> <string name="pref_sort_title">File Order</string> <string name="pref_filter_title">Default File Filter</string> <string name="pref_filter_summary">Set which file filter should be used by default.</string> @@ -48,7 +48,7 @@ <string name="sort_za">Z-A</string> <string name="sort_oldest">Oldest first</string> <string name="sort_newest">Newest first</string> - <string name="file_icon_desc">fileicon</string> + <string name="file_icon_desc">File icon</string> <string name="title_recents">Recent files</string> <string name="title_browser">All files</string> <!-- Pref keys as resources ; Not currently used --> @@ -111,9 +111,9 @@ <!-- Permission rationale alert dialog strings --> <string name="title_permission_required">Permission Required</string> <string name="reason_required_to_read_documents">Storage permission is required for reading your documents.</string> - <string name="positive_ok">OKAY</string> - <string name="negative_im_sure">I\'M SURE</string> - <string name="negative_cancel">CANCEL</string> + <string name="positive_ok">OK</string> + <string name="negative_im_sure">I\'m sure</string> + <string name="negative_cancel">Cancel</string> <!-- Save Alert dialog strings --> <string name="action_cancel">Cancel</string> commit c3a8d21cd382014ce714adef82007d5acad214a2 Author: Eloy Crespo <eloy.cre...@collabora.com> AuthorDate: Wed Dec 11 14:43:10 2019 +0100 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: Spanish translations of the shell. Change-Id: I5c0d0034085f6b03f7541f259048ab0774f92081 Reviewed-on: https://gerrit.libreoffice.org/84977 Reviewed-by: Jan Holesovsky <ke...@collabora.com> Tested-by: Jan Holesovsky <ke...@collabora.com> diff --git a/android/app/src/main/res/values-es/strings.xml b/android/app/src/main/res/values-es/strings.xml new file mode 100644 index 000000000..65d991201 --- /dev/null +++ b/android/app/src/main/res/values-es/strings.xml @@ -0,0 +1,145 @@ +<resources> + <!--string name="app_name" aquí falta la definición deliberadamente, se completa en build.gradle.--> + + <string name="app_name_settings">Ajustes</string> + <string name="app_version">Version: %1$s, Build ID: %2$s</string> + <string name="app_description">$APP_NAME es un conjunto de productividad de código abierto moderno y fácil de usar, para procesamiento de textos, hojas de cálculo, presentaciones y más.</string> + <string name="app_vendor">Esta versión fue suministrada por $VENDOR.</string> + + <string name="no_recent_items">No hay elementos recientes</string> + <string name="no_items">No hay elementos</string> + <string name="temp_file_saving_disabled">Este archivo es de solo lectura, el guardado está deshabilitado.</string> + <string name="file_exists_warning">Ya existe un archivo con este nombre y se sobreescribirá</string> + <string name="file_creation_failed">La creación del archivo falló</string> + <string name="storage_permission_required">Se require permiso de almacenamiento</string> + <string name="failed_to_load_file">Error al determinar el archivo a cargar</string> + + <string name="list_view">Lista</string> + <string name="grid_view">Cuadrícula</string> + <string name="pref_category_explorer">Configuración del explorador de archivos</string> + <string name="pref_show_hidden_files">Archivos/Carpetas Ocultas</string> + <string name="pref_show_hidden_files_summary">Habilitar para mostrar archivos/carpetas ocultas</string> + <string name="pref_sort_summary">Seleccione cómo ordenar los archivos: A-Z, por tamaño o por fecha.</string> + <string name="pref_viewmode_summary">Ver archivos como una cuadrícula o en una lista.</string> + <string name="pref_file_explorer_title">Diseño del explorador de archivos</string> + <string name="pref_sort_title">Orden de Archivos</string> + <string name="pref_filter_title">Filtro de Archivos Predeterminado</string> + <string name="pref_filter_summary">Establezca quçe filstro de archivo debe usarse de manera predeterminada.</string> + <string name="display_language">Idioma de visualización</string> + <string name="display_language_summary">Establecer el idioma de visualización predeterminado</string> + <string name="pref_show_debug_info">Mostrar información de depuración</string> + <string name="pref_show_debug_info_summary">Habilite para mostrar información de depuración en el visor de documentos</string> + + <string name="about_license">Mostrar Licencia</string> + <string name="about_notice">Mostrar Aviso</string> + <string name="about_moreinfo">Más Información</string> + + <string name="new_textdocument">Nuevo Documento de Texto</string> + <string name="new_presentation">Nueva Presentación</string> + <string name="new_spreadsheet">Nueva Hoja de Cálculo</string> + <string name="new_drawing">Nuevo Dibujo</string> + <string name="default_document_name">sin título</string> + + <string name="filter">Filtrar por</string> + <string name="sort">Ordenar por</string> + <string name="sort_smallest">Más pequeño primero</string> + <string name="sort_largest">Más grande primero</string> + <string name="sort_az">A-Z</string> + <string name="sort_za">Z-A</string> + <string name="sort_oldest">Más antiguo primero</string> + <string name="sort_newest">Más reciente primero</string> + <string name="file_icon_desc">icono de archivo</string> + <string name="title_recents">Archivos recientes</string> + <string name="title_browser">Todos los archivos</string> + <!-- Pref keys as resources ; Not currently used --> + + <string name="action_about">Acerca de</string> + <string name="action_settings">Ajustes</string> + <string name="open">Abrir</string> + <string name="share">Compartir</string> + <string name="share_via">Compartir vía</string> + + <!-- Document browser filters --> + <string name="filter_everything">Todo</string> + <string name="filter_documents">Documentos</string> + <string name="filter_spreadsheets">Hojas de cálculo</string> + <string name="filter_presentations">Presentaciones</string> + <string name="filter_drawings">Dibujos</string> + + <!-- Document provider names --> + <string name="document_locations">Ubicaciones de documentos</string> + <string name="close_document_locations">Cerrar ubicaciones de documentos</string> + <string name="local_documents">Directorio de documentos</string> + <string name="local_file_system">Systema de Arhivo local</string> + <string name="external_sd_file_system">SD Externa</string> + <string name="otg_file_system">Dispositivo OTB (experimental)</string> + <string name="remote_server">Servidor remoto</string> + <string name="usb_connected_configure">USB conectado, configure su dispositivo</string> + + <string name="owncloud_wrong_connection">Imposible conectar con el servidor en la nube. Revise su configuración.</string> + <string name="owncloud_unauthorized">Imposible iniciar sesión en el servidor en la nube. Revise su configuración.</string> + <string name="owncloud_unspecified_error">Error no especificado al conectarse al servidor en la nube. Revise su configuración y/o intente más tarde.</string> + + <string name="ext_document_provider_error">Archivo raíz no válido. Verifique la configuración de su tarjeta sd.</string> + <string name="otg_missing_error">Archivo raíz no válido. Verifique su dispositivo OTG y/o la configuración.</string> + + <!-- Edit action names --> + + <!-- Feedback messages --> + + <!-- Document provider settings --> + <string name="storage_provider_settings">Configuración del proveedor de almacenamiento</string> + <string name="owncloud_settings">Configuración del servidor en la nube</string> + <string name="physical_storage_settings">Configuraciones de almacenamiento físico</string> + <string name="external_sd_path">Ruta SD externa</string> + <string name="otg_device_path">Ruta del dispositivo OTG</string> + <string name="otg_warning">Característica experimental: Úselo solo si el dispositivo OTG es grabable</string> + <string name="server_url">URL del servidor</string> + <string name="server_url_and_port">URL y puerto del servidor en la nube</string> + <string name="user_name">Nombre de usuario</string> + <string name="password">Contraseña</string> + + <!-- Directory browser strings --> + <string name="up_description">Al directorio principal</string> + <string name="confirm_label">Confirmar</string> + <string name="cancel_label">Cancelar</string> + <string name="search_label">Ir</string> + <string name="directory_browser_label">Elegir Directorio</string> + <string name="bad_directory">Ruta de directorio inválida</string> + <string name="current_dir">Directorio Actual: %1$s</string> + + <!-- Permission rationale alert dialog strings --> + <string name="title_permission_required">Permiso Requerido</string> + <string name="reason_required_to_read_documents">Se requiere permiso de almacenamiento para leer sus documentos.</string> + <string name="positive_ok">OK</string> + <string name="negative_im_sure">Estoy seguro</string> + <string name="negative_cancel">Cancelar</string> + + <!-- Save Alert dialog strings --> + <string name="action_cancel">Cancelar</string> + + <!-- Create New Document Dialog Strings --> + <string name="create_new_document_title">Crear Nuevo Documento</string> + <string name="enter_filename">Por favor ingrese el nombre del archivo:</string> + <string name="action_create">Crear</string> + <string name="action_overwrite">Sobreescribir</string> + + <!-- Loading SlideShow Dialog Strings --> + <string name="loading">Cargando...</string> + + <!-- Presentation Mode Strings --> + + <!-- Calc Header Menu Strings --> + + <!-- Password dialog strings --> + + <!-- Insert Image Strings --> + + <!-- Clipboard Actions --> + + <!-- UNO cmd controller Strings --> + <string name="unable_to_go_further">Imposible ir más allá.</string> + <string name="bmp_null">Bmp es nulo!</string> + <string name="directory_not_saved">Directorio no guardado.</string> + <string name="title_activity_show_html">Sobre</string> +</resources> commit e590fe688513247a55b8c47619624a7b84853f5c Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Wed Dec 11 11:19:28 2019 +0000 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: encode SCHEME_FILE paths as URIs not paths. Fixes encoding problems particularly with eg. SCHEME_FILE: getPath(): /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/u...@demoserver.com%2Fnextcloud/test.docx Change-Id: I0f2a84ff29fffd87ef059727bfb530bb54ab2ab9 Reviewed-on: https://gerrit.libreoffice.org/84936 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java index a8a9b80ad..bae078ab9 100644 --- a/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java +++ b/android/lib/src/main/java/org/libreoffice/androidlib/LOActivity.java @@ -248,7 +248,7 @@ public class LOActivity extends AppCompatActivity { } } else if (getIntent().getData().getScheme().equals(ContentResolver.SCHEME_FILE)) { isDocEditable = true; - urlToLoad = getIntent().getData().getPath(); + urlToLoad = getIntent().getData().toString(); Log.d(TAG, "SCHEME_FILE: getPath(): " + getIntent().getData().getPath()); // Gather data to rebuild IFile object later providerId = getIntent().getIntExtra( commit bb05da508c57968e65f735b34dfca96c90fbde61 Author: Andras Timar <andras.ti...@collabora.com> AuthorDate: Wed Dec 11 11:24:03 2019 +0000 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Thu Dec 12 10:18:24 2019 +0100 android: add pot file for localization diff --git a/android/app/src/main/locale/template.pot b/android/app/src/main/locale/template.pot new file mode 100644 index 000000000..336305881 --- /dev/null +++ b/android/app/src/main/locale/template.pot @@ -0,0 +1,444 @@ +# Translations template for PROJECT. +# Copyright (C) 2019 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2019. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2019-12-11 11:07+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <l...@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.7.0\n" + +#. string name="app_name" definition is deliberately missing here, it is filled +#. in in build.gradle. +msgctxt "app_name_settings" +msgid "Settings" +msgstr "" + +#, c-format +msgctxt "app_version" +msgid "Version: %1$s, Build ID: %2$s" +msgstr "" + +msgctxt "app_description" +msgid "" +"$APP_NAME is a modern, easy-to-use, open source productivity suite for " +"word processing, spreadsheets, presentations and more." +msgstr "" + +msgctxt "app_vendor" +msgid "This release was supplied by $VENDOR." +msgstr "" + +msgctxt "no_recent_items" +msgid "No recent items" +msgstr "" + +msgctxt "no_items" +msgid "No items" +msgstr "" + +msgctxt "temp_file_saving_disabled" +msgid "This file is read-only, saving is disabled." +msgstr "" + +msgctxt "file_exists_warning" +msgid "A file with this name already exists, and will be overwritten." +msgstr "" + +msgctxt "file_creation_failed" +msgid "File creation failed" +msgstr "" + +msgctxt "storage_permission_required" +msgid "Storage permission is required" +msgstr "" + +msgctxt "failed_to_load_file" +msgid "Failed to determine the file to load" +msgstr "" + +msgctxt "list_view" +msgid "List" +msgstr "" + +msgctxt "grid_view" +msgid "Grid" +msgstr "" + +msgctxt "pref_category_explorer" +msgid "File Explorer Settings" +msgstr "" + +msgctxt "pref_show_hidden_files" +msgid "Hidden Files/Folders" +msgstr "" + +msgctxt "pref_show_hidden_files_summary" +msgid "Enable to show hidden files/folders" +msgstr "" + +msgctxt "pref_sort_summary" ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits