Compare commits

...

270 Commits

Author SHA1 Message Date
Shahaab
8343604394 adding language selector INITIAL COMMIT NOTFINAL 2021-02-23 19:41:35 +05:30
Shahaab
908611102c adding files from shahaab/prototype 2021-02-14 00:02:00 +05:30
Shahaab
4949a1d027 fixing typo -initial commit 2021-02-13 23:41:10 +05:30
Matthieu Gautier
971374e049 Merge pull request #455 from kiwix/api-break-bumpup-major-version
Bump-up version to 10.0.0
2021-02-10 10:47:06 +01:00
Emmanuel Engelhart
f7608c378e Bump-up version to 10.0.0 2021-02-10 10:31:01 +01:00
Kelson
c13a43010a Merge pull request #453 from kiwix/fixed-typo
Typo fix in error message
2021-02-09 09:41:00 +01:00
Emmanuel Engelhart
eea10ec3f5 Typo fix in error message 2021-02-09 09:38:18 +01:00
Kelson
c9bc2b48b0 Merge pull request #452 from kiwix/version-update
Bump-up version (and libzim required version)
2021-02-08 21:30:11 +01:00
Veloman Yunkan
b1689e0d3c Bump-up version (and libzim required version) 2021-02-07 19:53:46 +04:00
Kelson
c70c370ae0 Merge pull request #435 from kiwix/ppa-soname-bump
PPA: Update for soname bump
2021-01-27 09:25:39 +01:00
Kunal Mehta
c0ec5eeffd PPA: Update for soname bump 2021-01-27 09:14:36 +01:00
Matthieu Gautier
c81c2a4630 Merge pull request #445 from kiwix/no_pthread 2021-01-26 18:06:16 +01:00
Matthieu Gautier
24b2e6e585 Remove unnecessary include. 2021-01-26 17:53:25 +01:00
Matthieu Gautier
3fd1310008 Use c++11 std::thread instead of pthread. 2021-01-26 17:53:25 +01:00
Matthieu Gautier
17bc1a3e1a [TEST] Do not try to use the bookId if it is wrong. 2021-01-26 17:53:25 +01:00
Matthieu Gautier
f5d9a3714d Merge pull request #449 from kiwix/handle_no_counter
Do not crash if zim file has no `Counter` metadata.
2021-01-26 17:52:33 +01:00
Matthieu Gautier
4749656828 Do not crash if zim file has no Counter metadata. 2021-01-26 15:15:27 +01:00
Kelson
e0bcafd89a Merge pull request #442 from kiwix/better-taskbar-insertion
Better taskbar insertion
2021-01-18 13:32:11 +01:00
Emmanuel Engelhart
84895c4036 Better </head> detection regex 2021-01-18 13:16:56 +01:00
Emmanuel Engelhart
a8bf9dd5b4 Better Kiwix Serve Taskbar insertion (after charset definition) 2021-01-18 11:18:53 +01:00
Emmanuel Engelhart
a61c94ef10 Add GPLv3 header 2021-01-18 10:54:33 +01:00
Kelson
a8a864f70e Merge pull request #434 from kiwix/mandatory_xapian
Build kiwix-lib only if meson is compiled with xapian.
2021-01-15 10:03:57 +01:00
Matthieu Gautier
a231dfd8e4 Build kiwix-lib only if meson is compiled with xapian. 2021-01-14 12:07:17 +01:00
Kelson
321d08e3d5 Merge pull request #440 from kiwix/better-taskbar-introduction
Fix taskbar insertion in case of '<head>' attributes
2021-01-12 11:48:57 +01:00
Emmanuel Engelhart
8c43fd8d36 Fix taskbar insertion in case of '<head>' attributes 2021-01-11 14:37:19 +01:00
Kelson
9e032b6eea Merge pull request #439 from kiwix/mediacount-video-audio
Support 'video/*' * 'audio/*' mimetypes in getMediaCount()
2021-01-08 13:01:42 +01:00
Emmanuel Engelhart
3e2810dff4 Support 'video/*' * 'audio/*' mimetypes in getMediaCount() 2021-01-07 12:32:32 +01:00
Kelson
18afa97674 Merge pull request #437 from kiwix/count-webp-media
More robust getMediaCount()
2021-01-03 21:15:55 +01:00
Emmanuel Engelhart
44c4aa931a Better use kiwix::startsWith() 2021-01-03 15:17:03 +01:00
Emmanuel Engelhart
95b32b168d More robust getMediaCount() 2021-01-01 17:05:32 +01:00
Kelson
2659f323cd Merge pull request #433 from kiwix/small_fixes
Fixes related to libzim next.
2020-12-11 06:46:40 +01:00
Matthieu Gautier
1002c15e0d Remove unnecessary checks.
`Reader` cannot be created with a null `zimArchive`.
We don't have to check for zimArchive being not null.
2020-12-09 14:25:02 +01:00
Matthieu Gautier
d51000c4a9 Use new libzim method hasFulltextIndex to check for fulltext index. 2020-12-09 14:25:02 +01:00
Matthieu Gautier
ba302bed33 Use new libzim method getFaviconEntry to get the favicon. 2020-12-09 14:25:02 +01:00
Kelson
9941d245e1 Merge pull request #432 from swills/fbsd-build-fix1
fix build on FreeBSD
2020-12-09 14:24:04 +01:00
Steve Wills
6900b4e506 fix build on FreeBSD
With this header, sockaddr_in and INADDR_ANY are not defined
2020-12-07 09:38:46 -05:00
Kelson
6fa20f6dcf Merge pull request #431 from kiwix/legoktm-patch-1
PPA: Build for Ubuntu Hirsute
2020-12-05 09:29:47 +01:00
Kunal Mehta
8eacb0d635 PPA: Build for Ubuntu Hirsute 2020-12-03 22:35:46 -08:00
Kelson
84c320d5d3 Merge pull request #428 from kiwix/libzim_next
Adapt kiwx-lib to the new api of libzim (libzim_next).
2020-12-03 09:11:28 +01:00
Matthieu Gautier
1a5a2e7a8e Adapt kiwix-lib to the new libzim api. 2020-12-02 12:16:48 +01:00
Matthieu Gautier
d87079ec13 Remove deprecated method in the reader. 2020-11-24 19:00:52 +01:00
Matthieu Gautier
fbd4332c87 New version 9.4.1 2020-11-17 15:42:13 +01:00
Matthieu Gautier
7c4517ca3c Merge pull request #427 from kiwix/fix_deps_zlib 2020-11-17 12:05:50 +01:00
Matthieu Gautier
bc4b6846ef Add missing dependency declaration in the README. 2020-11-17 11:54:36 +01:00
Matthieu Gautier
f408fecdd0 Add missing zlib dependency.
libzim were dependent of zlib and we were (wrongly) using its
dependency declaration to link with zlib.

Now that libzim doesn't depends on zlib, we need to fix our build system
and explicitly depend on it.
2020-11-17 11:54:10 +01:00
Kelson
038e86e0d8 Merge pull request #419 from kiwix/legoktm-patch-1
debian: Have libkiwix-dev depend on libmicrohttpd-dev
2020-11-04 15:20:36 +01:00
Kunal Mehta
41cee1cfe0 debian: Have libkiwix-dev depend on libmicrohttpd-dev
As of 9c925f6778, it's now required in the pkg-config file.
2020-11-04 15:14:09 +01:00
Kelson
7e2d174cfb Merge pull request #422 from kiwix/rgaudin/taskbar-height
Adjust body padding-top for taskbar
2020-11-04 15:13:18 +01:00
renaud gaudin
52da58a294 Adjust body padding-top for taskbar
taskbar is placed *above* content using a `padding-top: 3em;` rule
Currently, in regular case, padding-top is too large and leaves ~4/5px between the
taskbar and the content.
This fixes it by using a `calc()` rule to eliminate this extra space
2020-11-04 11:53:59 +00:00
Matthieu Gautier
0f8caba3a5 Merge pull request #418 from kiwix/fix_counter_parsing 2020-10-30 13:42:52 +01:00
Veloman Yunkan
0f8fe1f63f Alternative implementation of parseMimetypeCounter() 2020-10-29 14:11:27 +04:00
Matthieu Gautier
ed32e16db2 Use a reference in test/server.cpp loop.
This is mainly to make the macos CI pass.
2020-10-28 16:08:37 +01:00
Matthieu Gautier
08464f23bc Better parsing of M/Counter
Mimetype may contain a parameters.
Then, the mimetype would be something like "text/html;foo=bar;foz=baz"

It will contains a `;` and `=` and it conflicts with the same operators
we use to separate the items in our list.

We have to use a more advanced algorithm which takes the context into
account.

Fix #416
2020-10-28 16:03:18 +01:00
Matthieu Gautier
ef42abea4b Add some tests of parseMimetypeCounter 2020-10-28 14:44:23 +01:00
Matthieu Gautier
4407dd12bd Move mimetypeCounter parsing in its own function. 2020-10-28 14:08:06 +01:00
Matthieu Gautier
d546ae38c4 Merge pull request #417 from kiwix/fix_macos_ci_install
[CI] Fix macos packages installation
2020-10-27 15:18:23 +01:00
Matthieu Gautier
7a11ec6ea4 [CI] Fix macos packages installation 2020-10-27 15:13:19 +01:00
Matthieu Gautier
095c86cf90 Merge pull request #415 from kiwix/stop_server 2020-10-16 14:12:47 +02:00
Matthieu Gautier
632583ede2 Add missing include 2020-10-07 18:43:57 +02:00
Matthieu Gautier
9c925f6778 kiwix-lib pc need libmicrohttpd 2020-10-07 17:48:30 +02:00
Matthieu Gautier
61f9d4ab3a Stop the internal server only if it exists. 2020-10-07 14:36:45 +02:00
Kelson
de6b8ba4de Merge pull request #413 from hashworks/archCommunityPkg
Add repology package badge
2020-08-30 22:05:37 +02:00
hashworks
ab7349dbc8 Switch to repology package badge 2020-08-30 20:59:14 +02:00
hashworks
292004703e Add shield and link to official Arch Linux package
I recently became an Arch Linux Trusted User and moved kiwix-lib
to the official community repository.
2020-08-30 13:22:13 +02:00
Kelson
c3e1e46d58 No AUR libkiwix package anymore 2020-08-30 09:56:38 +02:00
Matthieu Gautier
aba2f35092 New version 9.4.0 2020-08-28 16:04:40 +02:00
Matthieu Gautier
b3a3dfb79f Merge pull request #411 from kiwix/fix_subprocess_destructor 2020-08-28 16:02:25 +02:00
Matthieu Gautier
470bfc3f1f Better variable name for outStream. 2020-08-28 15:27:03 +02:00
Matthieu Gautier
ea3180cb8c Better error printing. 2020-08-28 15:27:03 +02:00
Matthieu Gautier
72d3f8f8e2 Fix segmentation fault with curl requests.
Use a heap allocated buffer (with lifetime of Aria2 class) instead of
a stack allocated one.

Original fix made by @ZaWertun. Kudos to him.

Fix #kiwix/kiwix-desktop#123, kiwix/kiwix-desktop#513
and kiwix/kiwix-desktop#423
2020-08-26 12:42:16 +02:00
Matthieu Gautier
af9e03904c Use std::mutex and std::unique_lock instead of pthread mutex/lock.
It simplify a bit the code and ensure that mutex is correctly unlock
even in case of exception.
2020-08-26 12:30:56 +02:00
Matthieu Gautier
39611cbd60 Wait for waitingThread to exit before destroying the subprocess memory.
WaitingThread read some shared memory with the SubProcess
(`mutex`, `m_running`).
When we destroy the SubProcess, we must be sure that WaitingThread has
correctly finished else we may have invalid read/write on freed memory.
2020-08-26 12:26:04 +02:00
Kelson
4e98a76c19 Merge pull request #408 from kiwix/ppa-bionic
PPA: Build and publish packages for Ubuntu BIonic
2020-08-21 19:17:22 +02:00
Kunal Mehta
14767e6edb debian: Support already gzipped manpages
meson stopped automatically compressing in 0.49.0, but bionic uses 0.45.0.
2020-08-21 19:12:20 +02:00
Kunal Mehta
39bc8828cd PPA: Build packages for Ubuntu Bionic 2020-08-21 19:12:20 +02:00
Kelson
c183f57670 Merge pull request #401 from kiwix/rgaudin/external-block-warn
Added comment marking dependency of a JS variable with warc2zim
2020-08-19 18:32:22 +02:00
renaud gaudin
009eb7f905 Added comment marking dependency of a JS variable with warc2zim
warc2zim's service worker captures all requests and then decides what to do based on
availability of the URL in the ZIM or not.
To allow the external URL blocking mechanism, it needs to known whether this was
enabled or not (as those in-iframe links won't be caught).
It detects this by looking for the `window.block_path` variable that is set in the
`block_external.js` script.

As this is fragile, we're adding a comment so that a future maintainer knows that
a third party tools relies on it.
2020-08-19 18:31:46 +02:00
Matthieu Gautier
eb7a8beb77 Merge pull request #397 from kiwix/refactor_response 2020-08-13 11:22:06 +02:00
Matthieu Gautier
6f0d3003ac Remove m_compress member. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
ee17b0739a Fix compilation on CI native dyn.
On the CI, the native_dyn docker image is setup with a packaged version
on libmicrohttpd for which `MHD_HTTP_RANGE_NOT_SATISFIABLE` is not
defined.

When the CI will be fixed, we can revert this commit.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
47436f7bdd Move some header setting in response's constructors.
It make easier to understand what is somehow constant and what depends
of the context.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
3352c95314 Remove the RedirectResponse and use a basic Response with header. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
77123ac74c Move the adding of 304 headers in 304 factory.
This avoid us to create a ContentResponse just to have some correct
headers.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
9078f0ac6e Remove ResponseMode. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
8d6567d067 Create a utility builder for 416 response.
Also add a map in the response to store specific headers.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
6d5cddca12 Fix android compilation
Android clang complains about the fact it cannot move the
`std::unique_ptr<ContentResponse>` into a `std::unique_ptr<Response>&&`
(for the implicit `std::unique_ptr<Response>` constructor).
Let's help him a bit.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
a3939e9a05 Move all the content code in the ContentResponse. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
eee621d15b Move small utilities method to create response in Response class. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
7b2ee37437 Move the entry response to its own class. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
f014fb2895 Introduce a ContentResponse.
This is only an "interface" for now as other type of response (entry) may
be "transformed" to a ContentResponse.
We cannot move all the code in the class.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
1011d1ff0b Move the redirection response in its own class.
The redirection is the easiest to move, let's start with this one.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
9e351b279e Remove get_default_response in favor of a static Response method.
We want to build different kind of response depending of the context.
2020-08-13 11:16:41 +02:00
Matthieu Gautier
a0bdc0821c Move internalServer code into its own source files. 2020-08-13 11:16:41 +02:00
Matthieu Gautier
a819d9e3e0 Make the server handle pointer to response instead of plain response.
This is a preparatory work.
We will specialize the response and so we need a pointer to response
instead of plain response.
2020-08-13 11:16:41 +02:00
rgaudin
49f3c56680 Merge pull request #400 from kiwix/rgaudin/home-favicon-size
Set fixed size for favicon in home page listing
2020-08-13 09:59:25 +02:00
renaud gaudin
1657b1744c Set fixed size for favicon in home page listing
While [spec](https://wiki.openzim.org/wiki/Metadata#Favicon) says that the favicon
should be a 48x48 image, ZIM creators might not respect it.

If a ZIM contains a larger favicon, the UI is broken. This fixes it ans ensures all
favicon have equal sizes, removing the unpleasing lack of harmony that we can see sometimes.

Note that ZIM will smaller size favicon would get blurry as those would be upscaled.
2020-08-12 14:47:37 +02:00
Matthieu Gautier
a126482d69 Merge pull request #399 from MananJethwani/search_pagination 2020-08-12 11:11:40 +02:00
manan jethwani
c74b935a9b added pageLength for search_pagination 2020-08-12 02:08:02 +05:30
Matthieu Gautier
015444cfd5 Merge pull request #406 from kiwix/fix_taskbar_impl 2020-08-11 18:37:42 +02:00
Matthieu Gautier
a55d504017 Fix getArticleCount.
With #403, the article mimetype may be different than "text/html".
It can also be "text/html; raw=true".
(And in fact it already could have any kind of optional argument).
2020-08-11 18:27:54 +02:00
Matthieu Gautier
87b5adcaf4 Make the response responsible to detect if we must introduce taskbar.
The response detect if taskbar must be added depending of the mimetype.

Now, `set_taskbar` can be call unconditionally
(no need to check for the mimetype)

And we don't need to call set_taskbar if we have no information to set.
2020-08-11 18:27:54 +02:00
Matthieu Gautier
c14c148af7 Merge pull request #405 from kiwix/support_for_meson_0_45 2020-08-11 18:27:37 +02:00
Veloman Yunkan
56e46c43f8 Upped meson version in the README 2020-08-11 18:17:18 +02:00
Veloman Yunkan
c4e6313c90 x in a --> a.contains(x) in meson.build files 2020-08-11 18:17:18 +02:00
Veloman Yunkan
18e46969b7 Workaround for configure_file(copy:true)
The `copy` keyword argument of `configure_file()` first appears in
meson 0.47. Now performing file copy via python.
2020-08-11 18:17:18 +02:00
Veloman Yunkan
e8cc6e4205 Copying data files via a loop 2020-08-11 18:17:18 +02:00
Veloman Yunkan
5f0bcd2bfa Renamed wikipedia_en_ray_charles_mini_2020-03.zim 2020-08-11 18:17:18 +02:00
Veloman Yunkan
a3bef76083 example.zim is copied only if gtest is available 2020-08-11 18:17:18 +02:00
Kelson
66563d93cc Merge pull request #403 from kiwix/rgaudin/no-taskbar
Prevent taskbar and blocker at article level
2020-08-07 11:55:09 +02:00
renaud gaudin
3f25a3d005 Fixed #391: prevent taskbar and blocker at article level
Some HTML articles are meant to be displayed through a viewer. In this case,
we know we don't want the server to inject the taskbar nor the link blocker
because the content is not a user-ready web page but a partial element of it.

Such articles still need to be `text/html` to be parsed properly by browsers.

This changes the way we decide to display the tasbar or not.
Previously, we were adding it to every article with a MIME __starting with__ `text/html`.
Now, we're additionally preventing it on `text/html` MIME if there is a `;raw=true` string inside.

This leaves articles with MIME `text/html;raw=true` (warc2zim convention) outside
of the taskbar target.

For similar reasons, the external-link blocker is set to apply to the same set of articles.
Previously, it was applied to all articles which was an (unoticable) mistake.
2020-08-07 09:26:24 +02:00
Kelson
98a10d2ca1 Merge pull request #402 from kiwix/legoktm-aria2
Move aria2 from a build dependency to runtime
2020-08-05 23:08:21 +02:00
Kunal Mehta
fdc59b1ec9 debian: Move aria2 from build dep to runtime dependency
Fixes https://github.com/kiwix/kiwix-desktop/issues/505.
2020-08-05 14:02:03 -07:00
Kunal Mehta
1b399fc0a2 README: Clarify aria2 is only a runtime dependency 2020-08-05 13:58:53 -07:00
Kelson
5f8c099829 Merge pull request #396 from MananJethwani/add_204_status_code
Added 204 code for empty return of search.
2020-08-01 10:28:56 +02:00
MananJethwani
599aaa4c1b added code for status code 204 for empty return of search. 2020-08-01 01:45:42 +05:30
Matthieu Gautier
1884081ebe Merge pull request #388 from kiwix/case_insensitive_request_headers
Request header case is ignored
2020-07-30 16:27:14 +02:00
Veloman Yunkan
3d425f44de Request header case is ignored
Originally reported against case sensitivity of the Range header
(see issue #387), this fix applies to all request headers (since
according to RFC 7230 all header fields are case-insensitive, see
https://tools.ietf.org/html/rfc7230#section-3.2). However, a
corresponding unit-test was added only for the Range header.
2020-07-30 16:01:51 +02:00
Kelson
d8991c5459 Merge pull request #389 from kiwix/ppa-sync
PPA: Drop eoan and sync with proper Debian package
2020-07-24 11:21:41 +02:00
Kunal Mehta
c7cb87dd57 debian: Sync with proper Debian package
* Switch to debhelper compat 13
* Increase test timeout via `meson test`
* Depend on same version of libzim as meson.build specifies
* Restore mistakenly deleted libkiwix-dev.manpages
  * We still need this file to instruct Debian to associate it with the
    libkiwix-dev package.
2020-07-24 02:01:34 -07:00
Kunal Mehta
1145af43e7 PPA: Stop building for Ubuntu eoan, its EOL
Launchpad no longer accepts uploads for eoan.
2020-07-24 01:58:30 -07:00
Kelson
d5b2742fbb Merge pull request #384 from kiwix/legoktm-fail-fast
PPA: Set fail-fast: false
2020-07-24 08:45:04 +02:00
Kunal Mehta
a0eb972595 PPA: Set fail-fast: false
See discussion/rationale at <https://github.com/openzim/libzim/pull/370>.
2020-07-16 06:02:41 -07:00
Matthieu Gautier
3bf70f4315 New version 9.3.1 2020-07-15 16:42:16 +02:00
Matthieu Gautier
a8130bd4f2 Fix licensing in meson.build. 2020-07-15 16:41:57 +02:00
Matthieu Gautier
a35d95207e Merge pull request #381 from kiwix/manpage
Have meson manage/install the kiwix-compile-resources.1 man page
2020-07-15 14:39:02 +02:00
Kunal Mehta
b18c8e079e Have meson manage/install the kiwix-compile-resources.1 man page 2020-07-15 14:23:05 +02:00
Matthieu Gautier
4e9f563b45 Merge pull request #383 from kiwix/fix_path_windows 2020-07-15 12:00:58 +02:00
Matthieu Gautier
7ece383004 Add support for samba path on windows.
Fix kiwix/kiwix-desktop#429
2020-07-15 11:40:02 +02:00
Matthieu Gautier
4ca9558e30 Fix library test on windows. 2020-07-15 11:40:02 +02:00
Kelson
89582d526e Merge pull request #382 from kiwix/legoktm-sh4-atomic
Pass -latomic on sh4 architecture too
2020-07-15 06:39:40 +02:00
Kunal Mehta
5913f7efab Pass -latomic on sh4 architecture too
Same as #372.

I originally missed this because meson didn't know about sh4 until
recently (c.f. https://github.com/mesonbuild/meson/pull/7359), but
this should work fine on older meson versions too.
2020-07-14 17:22:55 -07:00
Matthieu Gautier
1367c5630f Merge pull request #368 from kiwix/jquery-ui-source
Add non-minified version of jquery-ui.js
2020-07-13 17:30:43 +02:00
Kunal Mehta
0ca27d8edf Add non-minified version of jquery-ui.js
Debian wants to have the source files for minified scripts. Also the
jqueryui.com downloader is broken, so if we ever needed to modify/fix the
library, it would be good to have a non-minified version on hand.

The non-minified version comes from
<https://github.com/components/jqueryui/blob/1.11.0/jquery-ui.js>, which
was the source for the now-deprecated bower package manager.
2020-07-13 16:45:24 +02:00
Kelson
60c6cc35d5 Merge pull request #379 from kiwix/ppa
Automatically build Debian packages and publish to PPA
2020-07-10 15:21:27 +02:00
Kunal Mehta
6b783b3998 Automatically build and publish packages via Github Actions
We can currently only build for Ubuntu versions because we're not yet
publishing libzim for Debian.

Development builds (on commits to master) will build against master libzim
while release builds (on tag pushes) will build against the most recent
release of libzim.
2020-07-10 02:48:23 -07:00
Kunal Mehta
55515f2fc6 Add Debian packaging
It may make sense to move kiwix-compile-resources.1 into the main source
and have meson manage it in the future.
2020-07-10 02:14:38 -07:00
Kelson
7fe07c65fd Merge pull request #378 from kiwix/increase-test-timeout
Increase test timeout to 160s
2020-07-10 10:16:22 +02:00
Kelson
ee204a9b5e Increase test timeout to 160s 2020-07-09 10:02:36 +02:00
Kelson
e743e04b94 Merge pull request #377 from kiwix/libmicrohttpd-compilation-fix
Fix compilation with libmicrohttpd v0.97.1
2020-07-08 14:56:13 +02:00
Kelson
cf8e8b94eb Fix compilation with libmicrohttpd v0.97.1 2020-07-08 14:42:46 +02:00
Matthieu Gautier
d9557da813 Merge pull request #376 from kiwix/dont_include_config
Do not include `kiwix_config.h` in public header.
2020-07-06 16:55:20 +02:00
Matthieu Gautier
c19b983914 Do not include kiwix_config.h in public header.
This define `VERSION` and may conflict with dependent projects.

If some want to get the version of kiwix-lib they can include
`kiwix_config.h` directly.
2020-07-06 16:03:06 +02:00
Matthieu Gautier
f997fdb232 Release 9.3.0 2020-07-02 15:17:46 +02:00
Matthieu Gautier
f0b037f37f Merge pull request #374 from kiwix/new_api_multithread_suggestion
Add new thread safe suggestion API.
2020-07-02 14:12:12 +02:00
Matthieu Gautier
4d307e18eb Add new thread safe suggestion API.
Previous API were using an internal vector to store the suggestions search
results.

The new API takes a vector as out argument. So user can call the functions
without having to protect the search.

We should change the android API to reflect the change but it is a bit
more complex to do at JNI level. As android do not call it multithreaded
we are safe for now. And we need the new API asap for kiwix-desktop.

So we keep the same API on android for now, the new api will be made
in next version.
2020-07-01 17:16:13 +02:00
Matthieu Gautier
e05bd8efd6 Release 9.2.3 2020-07-01 11:33:30 +02:00
Matthieu Gautier
71462696bd Merge pull request #372 from kiwix/link-atomic
Pass -latomic for architectures that need it
2020-06-29 14:43:16 +02:00
Kunal Mehta
fb79cde729 Pass -latomic for architectures that need it
Some architectures, specifically armel, mipsel, m68k & powerpc in
Debian, need to explicitly link to atomic.

Use meson to see if the target's CPU family is one of those, and if so,
pass -latomic to the linker.

Tested on armel and mipsel machines to verify passing -latomic works, and
on armhf and amd64 to ensure normal builds aren't broken.

Fixes #371.
2020-06-29 00:18:13 -07:00
Matthieu Gautier
c986290d83 Merge pull request #359 from kiwix/packaged-mustache
Support building against packaged libkainjow-mustache
2020-06-12 11:13:05 +02:00
Kunal Mehta
af9afab821 Support building against packaged libkainjow-mustache
The Debian/Ubuntu package for mustache.hpp installs it to
/usr/include/kainjow/mustache.hpp. Have meson look for it in that include
directory as well before erroring out.

Fixes #318.
2020-06-12 11:09:34 +02:00
Matthieu Gautier
14af7b756e Merge pull request #366 from kiwix/fix_build_windows
Include missing `algorithm` header.
2020-06-10 16:00:36 +02:00
Matthieu Gautier
ff605873ed Include missing algorithm header.
`min` and `max` functions are defined here.
2020-06-10 15:27:51 +02:00
Matthieu Gautier
6c49c7ee0a Merge pull request #362 from kiwix/build_ci_bionic 2020-06-09 12:13:34 +02:00
Matthieu Gautier
157d1664cf Fix test compilation on bionic 2020-06-09 12:10:05 +02:00
Matthieu Gautier
6f92b7e120 Build the CI also on bionic.
Bionic has a more recent compiler who will catch more issue with the
code.
2020-06-09 12:10:05 +02:00
Matthieu Gautier
fd62acd232 Merge pull request #365 from kiwix/server_corner_cases_unit_test 2020-06-08 15:28:59 +02:00
Veloman Yunkan
1cdf830217 Testing of byte-range requests of 0-sized entries 2020-06-03 14:18:22 +04:00
Veloman Yunkan
0b48ab20bb Enhanced the server unit-test with corner cases 2020-06-03 13:45:31 +04:00
Matthieu Gautier
081a2b2fa6 New version 9.2.2 2020-06-03 10:47:39 +02:00
Matthieu Gautier
bf93d10cde Merge pull request #364 from kiwix/issue363
Fix for the failing assertion in the ByteRange constructor
2020-06-03 10:43:16 +02:00
Veloman Yunkan
05ef5d5f51 Assertion in ByteRange allows 0-sized content
The assertion in the ByteRange constructor was written under the assumption that the content must have non-zero size. Now it allows that corner case.
2020-06-02 21:53:47 +04:00
Matthieu Gautier
4cdae3ca98 New version 9.2.1 2020-06-02 10:18:12 +02:00
Matthieu Gautier
7dcaeed33a Merge pull request #360 from kiwix/http_byte_range 2020-06-01 17:41:59 +02:00
Veloman Yunkan
f52b220d01 Dropped RequestContext::has_range() 2020-05-26 14:10:26 +04:00
Veloman Yunkan
50a850f3a9 Fixed a comment 2020-05-26 14:04:18 +04:00
Veloman Yunkan
886ae17274 Fixed a CodeFactor issue 2020-05-26 13:59:47 +04:00
Veloman Yunkan
a9b6d481cc ServerTest.RangeHasPrecedenceOverCompression 2020-05-26 13:58:20 +04:00
Veloman Yunkan
85d6daabac Rolled back minor unneeded changes 2020-05-26 13:10:50 +04:00
Veloman Yunkan
5f1918d005 Split a long line 2020-05-26 13:04:03 +04:00
Veloman Yunkan
16bd79fa1b Final clean-up of byte_range.{h,cpp} 2020-05-26 12:50:08 +04:00
Veloman Yunkan
c2ebdefe8d Handling of unsatisfiable ranges 2020-05-26 02:11:26 +04:00
Veloman Yunkan
37032892a4 Fixed compilation error under win32_*
ERROR is a macro under Windows
2020-05-26 01:58:17 +04:00
Veloman Yunkan
6b43438b74 Fixed compilation error under native_dyn
MHD_HTTP_RANGE_NOT_SATISFIABLE is not defined in the older version of
libmicrohttpd (that is used under CI/Linux native_dyn).
2020-05-26 01:54:36 +04:00
Veloman Yunkan
7301bf89bb Some refactoring of byte-range parsing 2020-05-26 01:50:29 +04:00
Veloman Yunkan
ff23b28e7c Removed unnecessary qualifier 2020-05-26 01:41:37 +04:00
Veloman Yunkan
931e95f391 Invalid byte ranges result in 416 responses 2020-05-26 01:40:07 +04:00
Veloman Yunkan
f7571b5b69 Content-Range header is set only for partial content 2020-05-25 17:42:18 +04:00
Veloman Yunkan
801ad18a89 ByteRange::resolve() 2020-05-25 17:27:35 +04:00
Veloman Yunkan
67a347c0c4 Moved byte-range parsing to byte_range.cpp 2020-05-25 17:21:10 +04:00
Veloman Yunkan
693905eb68 Default constructed ByteRange is a full range 2020-05-25 17:17:56 +04:00
Veloman Yunkan
f3e79c6b4c Introduced src/server/byte_range.cpp 2020-05-25 16:43:44 +04:00
Veloman Yunkan
52f207eaa6 Support for single-ended byte ranges 2020-05-25 16:37:01 +04:00
Veloman Yunkan
67294217a8 ByteRange::Kind 2020-05-25 16:23:44 +04:00
Veloman Yunkan
d111a40ce8 Response::m_byteRange 2020-05-23 20:35:22 +04:00
Veloman Yunkan
0c5bb3fcfe Moved ByteRange to a header file of its own 2020-05-23 20:08:53 +04:00
Veloman Yunkan
3fba8c20a0 Converted RequestContext::ByteRange to a class
Also renamed the `range_pair` data member of `RequestContext` to `byteRange_`
2020-05-23 19:59:47 +04:00
Veloman Yunkan
54db6049b7 Byte-range parsing not exposed in the header file 2020-05-23 18:58:19 +04:00
Veloman Yunkan
81c38d6b2b parse_byte_range() without side-effects 2020-05-23 18:53:16 +04:00
Veloman Yunkan
e6a86c02ae Got rid of RequestContext::accept_range 2020-05-23 17:15:42 +04:00
Veloman Yunkan
a0f7f32570 Re-ordered function definitions 2020-05-23 17:11:26 +04:00
Veloman Yunkan
c39fce8839 RequestContext::parse_byte_range() 2020-05-23 17:09:51 +04:00
Veloman Yunkan
bd2d0bc489 Unit-test for valid single range requests 2020-05-22 17:39:00 +04:00
Veloman Yunkan
de37489c53 Range header starts with a unit spec
After this commit valid ranges of the form "bytes=firstbyte-lastbyte" should
be handled correctly.
2020-05-22 17:17:31 +04:00
Veloman Yunkan
2a35a86de6 Fixed the size value used creating a response
In case of a partial response the size of the response is different
from the served entry size.
2020-05-22 16:49:35 +04:00
Veloman Yunkan
0a30a77c08 Handling of out of bound byte ranges 2020-05-22 16:46:38 +04:00
Veloman Yunkan
1a99bacfe3 Byte ranges are inclusive
The second component of a byte range, if present, designates the
index of the last byte to be included in the partial response.
2020-05-22 16:30:43 +04:00
Matthieu Gautier
2bf35f1651 New version 9.2 2020-05-18 15:23:01 +02:00
Matthieu Gautier
48cc277468 Merge pull request #356 from kiwix/fix_test_httplib 2020-05-18 14:44:18 +02:00
Matthieu Gautier
d8498fd655 Do not build server test on windows.
On the appveyor CI, the link of the `server` test fails with
`libmicrohttpd`.

Do not build the test on windows to not break the CI.
2020-05-18 13:13:17 +02:00
Matthieu Gautier
7ec8e33b83 Fix include of httplib.h on windows.
On windows, `httplib.h` must be included before `windows.h`
We do not include directly `windows.h` in the test but it is included
indirectly by other headers.

Let's include httplib first.
2020-05-18 11:16:25 +02:00
Kelson
8eb2d0c2a1 Explain how to run automated tests 2020-05-18 08:37:51 +02:00
Kelson
5995cc276d Merge pull request #355 from kiwix/more-often-http-compression
Add two OPDS related mime-types to compress for HTTP
2020-05-18 08:33:44 +02:00
Kelson
94c2ab4395 Add two OPDS related mime-types to compress for HTTP 2020-05-18 08:19:51 +02:00
Kelson
15179db945 Merge pull request #354 from kiwix/small-http-header-beautification
Small HTTP header beautification
2020-05-17 21:50:26 +02:00
Kelson
0f07cab920 Small HTTP header beautification 2020-05-17 20:19:19 +02:00
Kelson
4f8b397081 Merge pull request #352 from kiwix/small-compilation-error-fix
Fix small compilation error in tests
2020-05-17 18:37:53 +02:00
Kelson
2df74d9755 Fix small compilation error in tests 2020-05-17 16:47:21 +02:00
Matthieu Gautier
0b25492edc Merge pull request #348 from kiwix/http_head_and_etag 2020-05-15 13:55:50 +02:00
Veloman Yunkan
5f0a9d0b08 Added a comment clarifying a non-obvious case 2020-05-15 15:17:04 +04:00
Veloman Yunkan
54f5dbbd35 Handling of If-None-Match conditional requests 2020-05-14 17:01:22 +04:00
Veloman Yunkan
95a5cde359 ETags are set in the response as needed
Also added server-unit tests related to ETags in the response.
2020-05-14 17:01:22 +04:00
Veloman Yunkan
3d08ef43f2 HEAD request is not rejected
libmicrohttpd handles HEAD requests by dropping the body of the response
(if any). Hence letting a HEAD request through into the code that
processes GET requests is safe.

Also added server unit-tests related to the handling of HEAD requests.
2020-05-14 17:01:22 +04:00
Matthieu Gautier
381ff186cb Merge pull request #349 from kiwix/fix_python 2020-05-04 10:55:55 +02:00
Matthieu Gautier
e32fa28a6c Use python3 instead of python.
`python` binary is not installed on all platform.
But `python3` is (because meson is python3).
And the script we launch is python3 so use the correct version.
2020-05-04 10:52:11 +02:00
Matthieu Gautier
1842e8f51c Merge pull request #345 from kiwix/server_refactoring 2020-04-29 17:38:41 +02:00
Veloman Yunkan
bfa51c2d87 Refactoring: got rid of duplicate get_mime_type() 2020-04-29 18:33:25 +04:00
Veloman Yunkan
81e781133d Refactoring: utilized is_compressible_mime_type() 2020-04-29 18:33:01 +04:00
Veloman Yunkan
9ec7757efe Refactoring: smart Response::set_entry()
Response::set_entry() was upgraded from a simple setter to a method
performing certain business logic that was previously taken care of by
InternalServer::handle_content().
2020-04-29 18:22:15 +04:00
Veloman Yunkan
7bd7ec4937 Refactoring: preparing to move some code 2020-04-29 18:22:15 +04:00
Veloman Yunkan
14d8583c83 Refactoring in InternalServer::handle_content()
Deduplicated common code found in the two branches of the last
if(){}else{} statement in InternalServer::handle_content().
2020-04-29 18:22:15 +04:00
Veloman Yunkan
a004d96cd7 Refactoring: extracted get_range_len() 2020-04-29 18:22:15 +04:00
Veloman Yunkan
21c6de2f80 Refactoring: split Response::create_mhd_response()
The changes are easier to understand in ignore-white-space mode
(git diff -w, git show -w).
2020-04-29 18:22:15 +04:00
Veloman Yunkan
a8e78f27e1 Refactoring: extracted Response::create_mhd_response() 2020-04-29 18:22:15 +04:00
Veloman Yunkan
6c7ab6ff54 Refactoring: moved local variable declarations 2020-04-29 18:21:40 +04:00
Veloman Yunkan
659ee6ba71 Refactoring: extracted InternalServer::build_redirect() 2020-04-29 16:08:10 +04:00
Veloman Yunkan
83ee8dec15 Made InternalServer::get_default_response() const 2020-04-29 16:08:10 +04:00
Veloman Yunkan
87cbbed9e3 Refactoring: extracted is_compressible_mime_type() 2020-04-29 16:08:10 +04:00
Veloman Yunkan
a058520628 Refactoring: extracted get_mime_type() 2020-04-29 16:08:10 +04:00
Veloman Yunkan
1ef5ebfb52 Refactoring: extracted InternalServer::get_reader() 2020-04-29 16:08:10 +04:00
Veloman Yunkan
bbc06931ad Refactoring: extracted get_book_name() 2020-04-29 16:08:10 +04:00
Veloman Yunkan
2d3bf9b981 Refactoring: extracted InternalServer::homepage_data()
Also typedef'ed kainjow::mustache::data as MustacheData
2020-04-29 16:08:10 +04:00
Veloman Yunkan
fd80f2a89f Refactoring: extracted fullURL2LocalURL()
Also dropped RequestContex::valid_url
2020-04-29 16:08:10 +04:00
Veloman Yunkan
abb3dec700 Refactoring: extracted str2RequestMethod() 2020-04-29 16:08:10 +04:00
Kelson
80fcbceeb3 Merge pull request #344 from kiwix/server_unittests
Server unittests
2020-04-29 14:02:57 +02:00
Veloman Yunkan
9a893a854e Revert "Server can be started on a random free port"
This change failed to build under the following platforms
due to an older version of libmicrohttpd missing support for
the MHD_DAEMON_INFO_BIND_PORT query:
- Linux (native_dyn)
- Linux (win32_dyn)
2020-04-29 15:40:02 +04:00
Veloman Yunkan
b0f65a02f2 Server can be started on a random free port
If the server is started with a port value of 0, it binds to a random
free port. The bound port can be obtained with a `getPort()` method.
2020-04-29 15:40:02 +04:00
Veloman Yunkan
9bf6d0621f Introducing 1st real unit test of the server
Added a new unit test 'test/server.cpp'. The pre-existing unit test
test/kiwixserve.cpp tests kiwixlib indirectly by running the kiwix-serve
executable which may be built with another version of the library.

Included with this commit is the cpp-httplib C++ HTTP/HTTPS library
(https://github.com/yhirose/cpp-httplib, v0.5.11).
The new file test/httplib.h was copied from
https://raw.githubusercontent.com/yhirose/cpp-httplib/v0.5.11/httplib.h
2020-04-29 15:39:18 +04:00
Veloman Yunkan
fcadacb0ad Resources are compiled as needed
Correct dependencies are set up for resource compilation and
build_always_stale is set to false.
2020-04-28 19:46:14 +04:00
Matthieu Gautier
8f07689c57 Merge pull request #346 from kiwix/unit-test 2020-04-28 11:04:58 +02:00
luddens
0630298fb9 Manager::addBookFromPathAndGetId unit test 2020-04-28 10:56:12 +02:00
Matthieu Gautier
9f61301423 New version 9.1.2 2020-04-20 15:31:14 +02:00
Matthieu Gautier
9c101daad7 Merge pull request #341 from kiwix/fix-addBookFromPathAndGetId 2020-04-20 15:27:57 +02:00
luddens
0586ef6d41 fix open external zim
Check if the parameter `pathToSave` is empty before use it otherwise the
book path is empty too, which causes crash on opening external zim files
2020-04-20 15:22:36 +02:00
Matthieu Gautier
8fc42558d3 New version 9.1.1 2020-04-17 17:36:11 +02:00
Matthieu Gautier
5d98a6964e Merge pull request #343 from kiwix/fix_datadir_windows
Fix datadir windows
2020-04-15 10:18:51 +02:00
Matthieu Gautier
9d8bf8ddcb Create the dataDirectory before returning its path. 2020-04-15 08:24:55 +02:00
Matthieu Gautier
4c8aad0e68 Do not use std::fstream has it doesn't support wchar path.
This is surprising, but C++11 fstream doesn't have a constructor
that take wchar as path.
So, on windows, we cannot open a stream on a path containing non ascii
char. VC++ provide an extension for that, but it is not standard and
g++ mingwin doesn't provide it.

So move all our write/read tools function to the plain old c versions,
using _wopen to open wide path on windows.
2020-04-14 18:13:35 +02:00
Matthieu Gautier
eb6f0f710c Correctly detetect the dataDir on windows.
We must use the wide version of the getenv to correctly handle the case
we have accents in the user directory.

This also change the default dataDirectory on windows from $APPDATA to
$APPDATA/kiwix.
2020-04-14 12:12:34 +02:00
Matthieu Gautier
d9d2a702ef Merge pull request #342 from kiwix/fix_iterator
Adapt to new libzim api.
2020-04-13 16:18:57 +02:00
Matthieu Gautier
cbf5bd57a8 Adapt to new libzim api.
It is not possible to create a iterator without argument anymore.
2020-04-13 16:06:17 +02:00
Matthieu Gautier
2bf6b04726 Update minimum version of libzim. 2020-04-08 18:03:18 +02:00
Matthieu Gautier
12a0660342 New version 9.1.0 2020-04-08 15:38:25 +02:00
Matthieu Gautier
ab478ed4cf Merge pull request #337 from kiwix/fix_book_articlecount
Fix book articlecount
2020-04-07 12:46:56 +02:00
Matthieu Gautier
533541cf45 Write the articleCount and mediaCount metadata in the OPDS stream.
This is not standard OPDS. But clients need this information.
2020-04-07 12:22:44 +02:00
Matthieu Gautier
bab0fd3d4f Correctly initialize members' value of book.
Fix #333
2020-04-07 12:21:36 +02:00
Kelson
375792a686 Merge pull request #335 from kiwix/fix_taskbar
attach taskbar to <head> instead of <head>\n
2020-04-03 16:56:55 +02:00
renaud gaudin
7155c788e2 attach taskbar to <head> instead of <head>\n
Fixed a regression introduced in block-external-links feature.

For cleaner source, the taskbar (and the block-external JS file) were both
attached to `<head>\n`.
Unfortunately, this isn't safe enough as some ZIM files might have all kinds of HTML
syntax. Sotoki for instance have no CR after head, rendering the attachment impossible.

Note: realizing this method is somehow fragile as any HTML content with extra attribute
on the `<head>` tag or without a `<head>` tag would break the taskbar and the block external feature.
2020-04-03 16:53:43 +02:00
Kelson
3ac926b39b Merge pull request #331 from kiwix/readme-mustache
add required info to README
2020-04-03 16:41:37 +02:00
renaud gaudin
ea3444e2fe add required info to README
Mustache 4 was release in late october 2019 and is not compatible with kiwix-lib as is.
Replacement in taskbar is messed-up and breaks suggestions.
Until this is fixed/adapted, inform users to use version 3.
2020-04-03 16:38:16 +02:00
Kelson
083c06d170 Merge pull request #336 from kiwix/better-ci-event
Run Github actions on any push (not only in PR)
2020-04-03 16:37:01 +02:00
Kelson
286fbba9f6 Run Github actions on any push (not only in PR) 2020-04-03 16:32:49 +02:00
Kelson
778603e1bf Use Github Actions CI badge (instead of Travis CI) 2020-04-03 16:30:42 +02:00
Kelson
411d4b0779 Merge pull request #334 from kiwix/fix-external
fix external link blocking for nested elems in link
2020-04-01 20:05:24 +02:00
renaud gaudin
bce0e8c37c fix external link blocking for nested elems in link
if a link contains nested elements like `<a href="http://somewhere"><strong>goto</strong></a>`
then the link is trigger by the `<strong />` element which has no `href` attribute.
We were thus releasing the event in this case, resulting in legitimate external links
not blocked.

We are now looking for the closest `<a />` parent (might be self) to retrieve the `href`
attribute and capture if necessary.
2020-04-01 17:50:54 +00:00
Matthieu Gautier
507002d34e Merge pull request #330 from kiwix/block-external-links
Add external links blocking in serve
2020-03-30 16:57:08 +02:00
renaud gaudin
34a8144f51 cleaned-up external link blocker page
- removed useless JS/CSS
- set specific title
2020-03-30 14:42:51 +00:00
renaud gaudin
4709a42f4f disable external links blocking on 500 handler 2020-03-30 14:42:37 +00:00
renaud gaudin
d04d9bf7f3 Unblock external link in catch page in JS code
Instead of disabling the blocking for the handler, the JS code detects it is
displaying the handler and allows external links to go through
2020-03-27 12:26:22 +00:00
renaud gaudin
412f0d9c61 moved blockExternalLink outside of taskbar
- `setBlockExternalLinks()` on server
- zero-dependency JS code
- JS script added in `inject_externallinks_blocker()`
- changed URL to `/catch/external?source=<source>`
2020-03-27 11:25:39 +00:00
renaud gaudin
0ad8bf45fc Add external links blocking in serve
In many use cases, it is not wanted to have user accidentaly click on external links
and leave the served ZIM content.
This could be because the result is unpredictible (reader not implementing this properly)
or because the serve user knows there's no backup internet connexion or because there is
an induced cost behind external links that doesn't affect served content.

using a new flag (`blockExternalLinks`) on `Response`/`setTaskBar`, a piece of JS code
is injected into the taskbar code.
This code adds a JS handler on all link click events and verifies the destination.
If the destination appears to be an external link (1), the link target is changed to
a specific URL:

```
/external?source=<original_uri>
```

(1) external is a link that's not on the same origin and starts with either `http:` `https:` or `//`.

Server implements a new handler on `/external` that displays a new page (`captured_external.html`)
which returns a generic message explaining the situation and offering to click on the link
again should the user really want to.
This is done by specifically asking `set_taskbar` to not block external requests on that page.

This approach allows integrators using a reverse proxy to handle that endpoint differently (rebrand it)

1. `Server` now has an `m_blockExternalLinks` defaulting to `false`
1. `Server.setTaskbar` is extended to support an additional bool to set the variable.
1. `Response` now has an `m_blockExternalLinks`
1. `Response` constr expects an additional bool for `blockExternalLinks`.
1. `Response.set_taskbar` is extended to support an additional bool to set the variable.
1. JNI/Java Wrapper reflects the extensions.
1. New resource file `templates/block_external.js` (included in head_part). Should it be in skin?
1. New resource file `templates/captured_external.html` for `handle_captured_external()`
1. Added a comment on `head_part.html` to help with JS insertion at the right place
1. `introduce_taskbar()` conditionnaly inserts the JS inside the taskbar
2020-03-26 12:06:36 +00:00
312 changed files with 38734 additions and 2190 deletions

View File

@@ -1,6 +1,6 @@
name: CI
on: [pull_request]
on: [push]
jobs:
Macos:
@@ -13,9 +13,8 @@ jobs:
with:
python-version: '3.5'
- name: Install packages
uses: mstksg/get-package@v1
with:
brew: gcovr pkg-config ninja
run:
brew install gcovr pkg-config ninja
- name: Install python modules
run: pip3 install meson==0.49.2 pytest
- name: Install deps
@@ -53,30 +52,41 @@ jobs:
strategy:
fail-fast: false
matrix:
target:
name:
- native_static
- native_dyn
- native_dyn_bionic
- android_arm
- android_arm64
- win32_static
- win32_dyn
include:
- target: native_static
- name: native_static
target: native_static
image_variant: xenial
lib_postfix: '/x86_64-linux-gnu'
- target: native_dyn
- name: native_dyn
target: native_dyn
image_variant: xenial
lib_postfix: '/x86_64-linux-gnu'
- target: android_arm
- name: native_dyn_bionic
target: native_dyn
image_variant: bionic
lib_postfix: '/x86_64-linux-gnu'
- name: android_arm
target: android_arm
image_variant: xenial
lib_postfix: '/x86_64-linux-gnu'
- target: android_arm64
- name: android_arm64
target: android_arm64
image_variant: xenial
lib_postfix: '/x86_64-linux-gnu'
- target: win32_static
- name: win32_static
target: win32_static
image_variant: f31
lib_postfix: '64'
- target: win32_dyn
- name: win32_dyn
target: win32_dyn
image_variant: f31
lib_postfix: '64'
env:
@@ -85,25 +95,20 @@ jobs:
container:
image: "kiwix/kiwix-build_ci:${{matrix.image_variant}}-26"
steps:
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
id: extract_branch
- name: Checkout code
shell: python
run: |
import json
from subprocess import check_call
from os import environ
with open(environ['GITHUB_EVENT_PATH'], 'r') as f:
content = f.read()
event_data = json.loads(content)
try:
branch_ref = event_data['ref'].split('/')[-1]
except KeyError:
branch_ref = event_data['pull_request']['head']['ref']
print("Cloning branch", branch_ref)
command = [
'git', 'clone',
'https://github.com/${{github.repository}}',
'--depth=1',
'--branch', branch_ref
'--branch', '${{steps.extract_branch.outputs.branch}}'
]
check_call(command, cwd=environ['HOME'])
- name: Install deps
@@ -152,6 +157,6 @@ jobs:
curl https://codecov.io/bash -o codecov.sh
bash codecov.sh -n "${OS_NAME}_${{matrix.target}}" -Z
rm codecov.sh
if: startsWith(matrix.target, 'native_')
if: startsWith(matrix.target, 'native_') && matrix.image_variant == 'xenial'
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

87
.github/workflows/package.yml vendored Normal file
View File

@@ -0,0 +1,87 @@
name: Packages
on: [push, pull_request]
jobs:
build-deb:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
distro: [ubuntu-hirsute, ubuntu-groovy, ubuntu-focal, ubuntu-bionic]
steps:
- uses: actions/checkout@v2
# Determine which PPA we should upload to
- name: PPA
id: ppa
run: |
if [[ $REF == refs/tags* ]]
then
echo "::set-output name=ppa::kiwixteam/release"
else
echo "::set-output name=ppa::kiwixteam/dev"
fi
env:
REF: ${{ github.ref }}
- uses: legoktm/gh-action-auto-dch@master
with:
fullname: Kiwix builder
email: release+launchpad@kiwix.org
distro: ${{ matrix.distro }}
- uses: legoktm/gh-action-build-deb@ubuntu-hirsute
if: matrix.distro == 'ubuntu-hirsute'
name: Build package for ubuntu-hirsute
id: build-ubuntu-hirsute
with:
args: --no-sign
ppa: ${{ steps.ppa.outputs.ppa }}
- uses: legoktm/gh-action-build-deb@ubuntu-groovy
if: matrix.distro == 'ubuntu-groovy'
name: Build package for ubuntu-groovy
id: build-ubuntu-groovy
with:
args: --no-sign
ppa: ${{ steps.ppa.outputs.ppa }}
- uses: legoktm/gh-action-build-deb@ubuntu-focal
if: matrix.distro == 'ubuntu-focal'
name: Build package for ubuntu-focal
id: build-ubuntu-focal
with:
args: --no-sign
ppa: ${{ steps.ppa.outputs.ppa }}
- uses: legoktm/gh-action-build-deb@ubuntu-bionic
if: matrix.distro == 'ubuntu-bionic'
name: Build package for ubuntu-bionic
id: build-ubuntu-bionic
with:
args: --no-sign
ppa: ${{ steps.ppa.outputs.ppa }}
- uses: actions/upload-artifact@v2
with:
name: Packages for ${{ matrix.distro }}
path: output
- uses: legoktm/gh-action-dput@master
name: Upload dev package
# Only upload on pushes to master
if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && startswith(matrix.distro, 'ubuntu-')
with:
gpg_key: ${{ secrets.LAUNCHPAD_GPG }}
repository: ppa:kiwixteam/dev
packages: output/*_source.changes
- uses: legoktm/gh-action-dput@master
name: Upload release package
# Only upload on pushes to master or tag
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && startswith(matrix.distro, 'ubuntu-')
with:
gpg_key: ${{ secrets.LAUNCHPAD_GPG }}
repository: ppa:kiwixteam/release
packages: output/*_source.changes

2
.gitignore vendored
View File

@@ -2,3 +2,5 @@
*.swp
subprojects/googletest-release*
*.class
build/
.vscode/

View File

@@ -1,3 +1,91 @@
kiwix-lib 9.4.1
===============
* Fix `M/Counter` parsing.
* [SERVER] Adjust body padding-top for taskbar
* Fix potential crash when stoping a server not started.
* Various fix in build system and the CI.
kiwix-lib 9.4.0
===============
* [SERVER] Make the headers handling case insensitive.
* [SERVER] Make server answer 204 http status code for empty search
* [PACKAGING] Made CI build deb packages.
* [SERVER] Add a way to prevent taskbar and external link bloquer at article
level.
* Fix meson file to be compatible with meson 0.45
* [SERVER] Update search requests to use pageStart/pageLength instead of
pageStart/pageEnd arguments.
* [SERVER] Set a fixed favicon size in the main page.
* [SERVER] Refactor the response system code to better handling future new
libzim api.
* Fix segmentation fault around exchange with aria2 process making
kiwix-desktop crash at exit.
kiwix-lib 9.3.1
===============
* Fix handling of samba path on windows.
* Do not include `kiwix_config.h` in public header.
* Fix compilation with libmicrohttpd v0.97.1
* Increase default test timeout to 160seconds/test.
* Add automatic debian packaging.
* Use non-minified version of jquery-ui.js
* Pass `-latomic` compile option for sh4 architecture.
* Make mesion install `kiwix-compile-resources` man page.
kiwix-lib 9.3.0
===============
* Add a thread safe method to search suggestions.
Old methods are now deprecated.
kiwix-lib 9.2.3
===============
* Add test on byte-range
* Fix compilation on bionic and windows.
* Allow building using debian packaged kainjow-mustache
* Pass `-latomic` compile option for architectures that need it
kiwix-lib 9.2.2
===============
* Fix handling on empty content in byte range management (wrong assert)
kiwix-lib 9.2.1
===============
* Fix support of byte range request.
kiwix-lib 9.2
=============
* Add tests
* Refactoring server code.
* [SERVER] Add HEAD, Etag and If-None-Match support.
* [SERVER] Compress opds catalog answers.
kiwix-lib 9.1.2
===============
* Do not use the pathToSave if it is empty.
kiwix-lib 9.1.1
===============
* Fix the detection of the dataDirectory on windows.
kiwix-lib 9.1.0
===============
* [JAVA] Add a method to get the size of an article.
* Add a new method to the libray to get the book by path.
* Add a option to make the server blocks external link.
Links are intercepted by js an redirected to a "portail" page.
* [ODPS] Correctly handle book's articleCount and mediaCount.
kiwix-lib 9.0.1
===============

View File

@@ -6,26 +6,27 @@ suite core. It contains the code shared by all Kiwix ports (Windows,
GNU/Linux, macOS, Android, iOS, ...).
[![Download](https://api.bintray.com/packages/kiwix/kiwix/kiwixlib/images/download.svg)](https://bintray.com/kiwix/kiwix/kiwixlib/_latestVersion)
[![AUR version](https://img.shields.io/aur/version/kiwix-lib)](https://aur.archlinux.org/packages/kiwix-lib/)
[![Build Status](https://travis-ci.com/kiwix/kiwix-lib.svg?branch=master)](https://travis-ci.com/kiwix/kiwix-lib)
[![Build Status](https://github.com/kiwix/kiwix-lib/workflows/CI/badge.svg?query=branch%3Amaster)](https://github.com/kiwix/kiwix-lib/actions?query=branch%3Amaster)
[![CodeFactor](https://www.codefactor.io/repository/github/kiwix/kiwix-lib/badge)](https://www.codefactor.io/repository/github/kiwix/kiwix-lib)
[![Codecov](https://codecov.io/gh/kiwix/kiwix-lib/branch/master/graph/badge.svg)](https://codecov.io/gh/kiwix/kiwix-lib)
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Packaging status](https://repology.org/badge/vertical-allrepos/kiwix-lib.svg)](https://repology.org/project/kiwix-lib/versions)
Disclaimer
----------
This document assumes you have a little knowledge about software
compilation. If you experience difficulties with the dependencies or
with the Kiwix libary compilation itself, we recommend to have a look
with the Kiwix library compilation itself, we recommend to have a look
to [kiwix-build](https://github.com/kiwix/kiwix-build).
Preamble
--------
Although the Kiwix library can be (cross-)compiled on/for many
sytems, the following documentation explains how to do it on POSIX
ones. It is primarly thought for GNU/Linux systems and has been tested
systems, the following documentation explains how to do it on POSIX
ones. It is primarily thought for GNU/Linux systems and has been tested
on recent releases of Ubuntu and Fedora.
Dependencies
@@ -38,10 +39,15 @@ libraries need to be available:
* [ICU](https://site.icu-project.org/) (package `libicu-dev` on Ubuntu)
* [ZIM](https://openzim.org/) (package `libzim-dev` on Ubuntu)
* [Pugixml](https://pugixml.org/) (package `libpugixml-dev` on Ubuntu)
* [Aria2](https://aria2.github.io/) (package `aria2` on Ubuntu)
* [Mustache](https://github.com/kainjow/Mustache) (Just copy the
header `mustache.hpp` somewhere it can be found by the compiler and/or
set CPPFLAGS with correct `-I` option)
set CPPFLAGS with correct `-I` option). Use Mustache version 3 only.
* [libcurl](https://curl.se/libcurl) (`libcurl4-gnutls-dev`, `libcurl4-nss-dev` or `libcurl4-openssl-dev` on Ubuntu)
* [microhttpd](https://www.gnu.org/software/libmicrohttpd) (package `libmicrohttpd-dev` on Ubuntu)
* [zlib](https://zlib.net/) (package `zlib1g-dev` on Ubuntu)
The following dependency needs to be available at runtime:
* [Aria2](https://aria2.github.io/) (package `aria2` on Ubuntu)
These dependencies may or may not be packaged by your operating
system. They may also be packaged but only in an older version. The
@@ -56,7 +62,7 @@ Environment
-------------
The Kiwix library builds using [Meson](https://mesonbuild.com/) version
0.43 or higher. Meson relies itself on Ninja, pkg-config and few other
0.45 or higher. Meson relies itself on Ninja, pkg-config and few other
compilation tools.
Install first the few common compilation tools:
@@ -85,6 +91,15 @@ Meson. If you want statically linked libraries, you can add
Depending of you system, `ninja` may be called `ninja-build`.
Testing
-------
To run the automated tests:
```bash
cd build
meson test
```
Installation
------------

View File

@@ -26,7 +26,7 @@ task writePom {
project {
groupId 'org.kiwix.kiwixlib'
artifactId 'kiwixlib'
version '9.0.1' + (System.env.KIWIXLIB_BUILDVERSION == null ? '' : '-'+System.env.KIWIXLIB_BUILDVERSION)
version '10.0.0' + (System.env.KIWIXLIB_BUILDVERSION == null ? '' : '-'+System.env.KIWIXLIB_BUILDVERSION)
packaging 'aar'
name 'kiwixlib'
url 'https://github.com/kiwix/kiwix-lib'

5
debian/changelog vendored Normal file
View File

@@ -0,0 +1,5 @@
libkiwix (0.0.0) unstable; urgency=medium
* Initial release
-- Kunal Mehta <legoktm@debian.org> Wed, 08 Jul 2020 18:12:32 -0700

46
debian/control vendored Normal file
View File

@@ -0,0 +1,46 @@
Source: libkiwix
Priority: optional
Maintainer: Kiwix team <kiwix@kiwix.org>
Build-Depends: debhelper-compat (= 13),
meson,
pkg-config,
libzim-dev (>= 6.1.8),
libcurl4-gnutls-dev,
libicu-dev,
libgtest-dev,
libkainjow-mustache-dev,
liblzma-dev,
libmicrohttpd-dev,
libpugixml-dev,
zlib1g-dev
Standards-Version: 4.5.0
Section: libs
Homepage: https://github.com/kiwix/kiwix-lib
Rules-Requires-Root: no
Package: libkiwix-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: libkiwix10 (= ${binary:Version}), ${misc:Depends}, python3,
libzim-dev (>= 6.0.0),
libicu-dev,
libpugixml-dev,
libcurl4-gnutls-dev,
libmicrohttpd-dev
Description: library of common code for Kiwix (development)
Kiwix is an offline Wikipedia reader. libkiwix provides the
software core for Kiwix, and contains the code shared by all
Kiwix ports (Windows, Linux, OSX, Android, etc.).
.
This package contains development files.
Package: libkiwix10
Architecture: any
Multi-Arch: same
Depends: ${shlibs:Depends}, ${misc:Depends}, aria2
Conflicts: libkiwix0, libkiwix3, libkiwix9
Description: library of common code for Kiwix
Kiwix is an offline Wikipedia reader. libkiwix provides the
software core for Kiwix, and contains the code shared by all
Kiwix ports (Windows, Linux, OSX, Android, etc.).

1
debian/copyright vendored Normal file
View File

@@ -0,0 +1 @@
See COPYING in the repository root.

4
debian/libkiwix-dev.install vendored Normal file
View File

@@ -0,0 +1,4 @@
usr/include
usr/lib/*/libkiwix.so
usr/lib/*/pkgconfig
usr/bin

1
debian/libkiwix-dev.manpages vendored Normal file
View File

@@ -0,0 +1 @@
usr/share/man/man1/kiwix-compile-resources.1*

1
debian/libkiwix10.install vendored Normal file
View File

@@ -0,0 +1 @@
usr/lib/*/libkiwix.so.*

8
debian/rules vendored Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
%:
dh $@ --buildsystem=meson
override_dh_auto_test:
dh_auto_test -- -t 3

1
debian/source/format vendored Normal file
View File

@@ -0,0 +1 @@
3.0 (native)

View File

@@ -98,7 +98,7 @@ class Book
std::string m_id;
std::string m_downloadId;
std::string m_path;
bool m_pathValid;
bool m_pathValid = false;
std::string m_title;
std::string m_description;
std::string m_language;
@@ -110,10 +110,10 @@ class Book
std::string m_flavour;
std::string m_tags;
std::string m_origId;
uint64_t m_articleCount;
uint64_t m_mediaCount;
bool m_readOnly;
uint64_t m_size;
uint64_t m_articleCount = 0;
uint64_t m_mediaCount = 0;
bool m_readOnly = false;
uint64_t m_size = 0;
mutable std::string m_favicon;
std::string m_faviconUrl;
std::string m_faviconMimeType;

View File

@@ -23,7 +23,6 @@
#include <string>
#include <vector>
#include <map>
#include <pthread.h>
#include <memory>
#include <stdexcept>

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018 Matthieu Gautier <mgautier@kymeria.fr>
* Copyright 2018-2020 Matthieu Gautier <mgautier@kymeria.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,7 +21,8 @@
#define KIWIX_ENTRY_H
#include <stdio.h>
#include <zim/article.h>
#include <zim/entry.h>
#include <zim/item.h>
#include <exception>
#include <string>
@@ -41,19 +42,12 @@ class NoEntry : public std::exception {};
class Entry
{
public:
/**
* Default constructor.
*
* Construct an invalid entry.
*/
Entry() = default;
/**
* Construct an entry making reference to an zim article.
*
* @param article a zim::Article object
*/
Entry(zim::Article article);
Entry(zim::Entry entry);
virtual ~Entry() = default;
/**
@@ -63,14 +57,14 @@ class Entry
*
* @return the path of the entry.
*/
std::string getPath() const;
std::string getPath() const { return entry.getPath(); }
/**
* Get the title of the entry.
*
* @return the title of the entry.
*/
std::string getTitle() const;
std::string getTitle() const { return entry.getTitle(); }
/**
* Get the content of the entry.
@@ -80,7 +74,7 @@ class Entry
*
* @return the content of the entry.
*/
std::string getContent() const;
std::string getContent() const { return entry.getItem().getData(); }
/**
* Get the blob of the entry.
@@ -90,7 +84,7 @@ class Entry
* @param offset The starting offset of the blob.
* @return the blob of the entry.
*/
zim::Blob getBlob(offset_type offset = 0) const;
zim::Blob getBlob(offset_type offset = 0) const { return entry.getItem().getData(offset); }
/**
* Get the blob of the entry.
@@ -101,7 +95,7 @@ class Entry
* @param size The size of the blob.
* @return the blob of the entry.
*/
zim::Blob getBlob(offset_type offset, size_type size) const;
zim::Blob getBlob(offset_type offset, size_type size) const { return entry.getItem().getData(offset, size); }
/**
* Get the info for direct access to the content of the entry.
@@ -117,7 +111,7 @@ class Entry
* The offset is the offset to read in the file.
* Return <"",0> if is not possible to read directly.
*/
std::pair<std::string, offset_type> getDirectAccessInfo() const;
std::pair<std::string, offset_type> getDirectAccessInfo() const { return entry.getItem().getDirectAccessInformation(); }
/**
* Get the size of the entry.
@@ -174,17 +168,14 @@ class Entry
Entry getFinalEntry() const;
/**
* Convert the entry to a boolean value.
* Get the zim entry wrapped by this (kiwix) entry
*
* @return True if the entry is valid.
* @return the zim entry
*/
explicit operator bool() const { return good(); }
const zim::Entry& getZimEntry() const { return entry; }
private:
zim::Article article;
mutable zim::Article final_article;
bool good() const { return article.good(); }
zim::Entry entry;
};
}

View File

@@ -25,7 +25,6 @@ install_headers(
'tools/pathTools.h',
'tools/regexTools.h',
'tools/stringTools.h',
'tools/lock.h',
subdir:'kiwix/tools'
)

View File

@@ -21,10 +21,8 @@
#define KIWIX_READER_H
#include <stdio.h>
#include <zim/article.h>
#include <zim/file.h>
#include <zim/fileiterator.h>
#include <zim/zim.h>
#include <zim/archive.h>
#include <exception>
#include <map>
#include <sstream>
@@ -43,6 +41,8 @@ namespace kiwix
* The Reader class is the class who allow to get an entry content from a zim
* file.
*/
using SuggestionsList_t = std::vector<std::vector<std::string>>;
class Reader
{
public:
@@ -56,7 +56,7 @@ class Reader
* (.zim extesion).
*/
Reader(const string zimFilePath);
~Reader();
~Reader() = default;
/**
* Get the number of "displayable" entries in the zim file.
@@ -99,17 +99,6 @@ class Reader
*/
string getId() const;
/**
* Get the url of a random page.
*
* Deprecated : Use `getRandomPage` instead.
*
* @return Url of a random page. The page is picked from all entries in
* the 'A' namespace.
* The main page is excluded from the potential results.
*/
DEPRECATED string getRandomPageUrl() const;
/**
* Get a random page.
*
@@ -119,31 +108,6 @@ class Reader
*/
Entry getRandomPage() const;
/**
* Get the url of the first page.
*
* Deprecated : Use `getFirstPage` instead.
*
* @return Url of the first entry in the 'A' namespace.
*/
DEPRECATED string getFirstPageUrl() const;
/**
* Get the entry of the first page.
*
* @return The first entry in the 'A' namespace.
*/
Entry getFirstPage() const;
/**
* Get the url of the main page.
*
* Deprecated : Use `getMainPage` instead.
*
* @return Url of the main page as specified in the zim file.
*/
DEPRECATED string getMainPageUrl() const;
/**
* Get the entry of the main page.
*
@@ -332,93 +296,15 @@ class Reader
*/
Entry getEntryFromTitle(const std::string& title) const;
/**
* Get the url of a page specified by a title.
*
* @param[in] title the title of the page.
* @param[out] url the url of the page.
* @return True if the page can be found.
*/
DEPRECATED bool getPageUrlFromTitle(const string& title, string& url) const;
/**
* Get the mimetype of a entry specified by a url.
*
* @param[in] url the url of the entry.
* @param[out] mimeType the mimeType of the entry.
* @return True if the mimeType has been found.
*/
DEPRECATED bool getMimeTypeByUrl(const string& url, string& mimeType) const;
/**
* Get the content of an entry specifed by a url.
*
* Alias to `getContentByEncodedUrl`
*/
DEPRECATED bool getContentByUrl(const string& url,
string& content,
string& title,
unsigned int& contentLength,
string& contentType) const;
/**
* Get the content of an entry specified by a url encoded url.
*
* Equivalent to getContentByDecodedUrl(urlDecode(url), ...).
*/
DEPRECATED bool getContentByEncodedUrl(const string& url,
string& content,
string& title,
unsigned int& contentLength,
string& contentType,
string& baseUrl) const;
/**
* Get the content of an entry specified by an url encoded url.
*
* Equivalent to getContentByEncodedUrl but without baseUrl.
*/
DEPRECATED bool getContentByEncodedUrl(const string& url,
string& content,
string& title,
unsigned int& contentLength,
string& contentType) const;
/**
* Get the content of an entry specified by a url.
*
* @param[in] url The url of the entry.
* @param[out] content The content of the entry.
* @param[out] title the title of the entry.
* @param[out] contentLength The size of the entry (size of content).
* @param[out] contentType The mimeType of the entry.
* @param[out] baseUrl Return the true url of the entry.
* If the specified entry is a redirection, contains
* the url of the targeted entry.
* @return True if the entry has been found.
*/
DEPRECATED bool getContentByDecodedUrl(const string& url,
string& content,
string& title,
unsigned int& contentLength,
string& contentType,
string& baseUrl) const;
/**
* Get the content of an entry specified by a url.
*
* Equivalent to getContentByDecodedUrl but withou the baseUrl.
*/
DEPRECATED bool getContentByDecodedUrl(const string& url,
string& content,
string& title,
unsigned int& contentLength,
string& contentType) const;
/**
* Search for entries with title starting with prefix (case sensitive).
*
* Suggestions are stored in an internal vector and can be retrieved using
* `getNextSuggestion` method.
* This method is not thread safe and is deprecated. Use :
* bool searchSuggestions(const string& prefix,
* unsigned int suggestionsCount,
* SuggestionsList_t& results);
*
* @param prefix The prefix to search.
* @param suggestionsCount How many suggestions to search for.
@@ -426,12 +312,49 @@ class Reader
* If false, add suggestions to the internal vector
* (until internal vector size is suggestionCount (or no more
* suggestion))
* @return True if some suggestions where added to the internal vector.
* @return True if some suggestions have been added to the internal vector.
*/
bool searchSuggestions(const string& prefix,
DEPRECATED bool searchSuggestions(const string& prefix,
unsigned int suggestionsCount,
const bool reset = true);
/**
* Search for entries with title starting with prefix (case sensitive).
*
* Suggestions are added to the `result` vector.
*
* @param prefix The prefix to search.
* @param suggestionsCount How many suggestions to search for.
* @param result The vector where to store the suggestions.
* @return True if some suggestions have been added to the vector.
*/
bool searchSuggestions(const string& prefix,
unsigned int suggestionsCount,
SuggestionsList_t& resuls);
/**
* Search for entries for the given prefix.
*
* If the zim file has a internal fulltext index, the suggestions will be
* searched using it.
* Else the suggestions will be search using `searchSuggestions` while trying
* to be smart about case sensitivity (using `getTitleVariants`).
*
* In any case, suggestions are stored in an internal vector and can be
* retrieved using `getNextSuggestion` method.
* The internal vector will be reset.
* This method is not thread safe and is deprecated. Use :
* bool searchSuggestionsSmart(const string& prefix,
* unsigned int suggestionsCount,
* SuggestionsList_t& results);
*
* @param prefix The prefix to search for.
* @param suggestionsCount How many suggestions to search for.
*/
DEPRECATED bool searchSuggestionsSmart(const string& prefix,
unsigned int suggestionsCount);
/**
* Search for entries for the given prefix.
*
@@ -446,19 +369,13 @@ class Reader
*
* @param prefix The prefix to search for.
* @param suggestionsCount How many suggestions to search for.
* @param results The vector where to store the suggestions
* @return True if some suggestions have been added to the results.
*/
bool searchSuggestionsSmart(const string& prefix,
unsigned int suggestionsCount);
bool searchSuggestionsSmart(const string& prefix,
unsigned int suggestionsCount,
SuggestionsList_t& results);
/**
* Check if the url exists in the zim file.
*
* Deprecated : Use `pathExists` instead.
*
* @param url the url to check.
* @return True if the url exits in the zim file.
*/
DEPRECATED bool urlExists(const string& url) const;
/**
* Check if the path exists in the zim file.
@@ -490,7 +407,7 @@ class Reader
* @param[out] title the title of the suggestion.
* @return True if title has been set.
*/
bool getNextSuggestion(string& title);
DEPRECATED bool getNextSuggestion(string& title);
/**
* Get the next suggestion title and url.
@@ -499,7 +416,7 @@ class Reader
* @param[out] url the url of the suggestion.
* @return True if title and url have been set.
*/
bool getNextSuggestion(string& title, string& url);
DEPRECATED bool getNextSuggestion(string& title, string& url);
/**
* Get if we can check zim file integrity (has a checksum).
@@ -515,16 +432,6 @@ class Reader
*/
bool isCorrupted() const;
/**
* Parse a full url into a namespace and url.
*
* @param[in] url The full url ("/N/url").
* @param[out] ns The namespace (N).
* @param[out] title The url (url).
* @return True
*/
DEPRECATED bool parseUrl(const string& url, char* ns, string& title) const;
/**
* Return the total size of the zim file.
*
@@ -539,28 +446,14 @@ class Reader
*
* @return The libzim file handler.
*/
zim::File* getZimFileHandler() const;
/**
* Get the zim article object associated to a url.
*
* @param[in] url The url of the article.
* @param[out] article The libzim article object.
* @return True if the url is good (article.good()).
*/
DEPRECATED bool getArticleObjectByDecodedUrl(const string& url,
zim::Article& article) const;
zim::Archive* getZimArchive() const;
protected:
zim::File* zimFileHandler;
zim::size_type firstArticleOffset;
zim::size_type lastArticleOffset;
zim::size_type nsACount;
zim::size_type nsICount;
std::unique_ptr<zim::Archive> zimArchive;
std::string zimFilePath;
std::vector<std::vector<std::string>> suggestions;
std::vector<std::vector<std::string>>::iterator suggestionsOffset;
SuggestionsList_t suggestions;
SuggestionsList_t::iterator suggestionsOffset;
private:
std::map<const std::string, unsigned int> parseCounterMetadata() const;

View File

@@ -60,6 +60,13 @@ class SearchRenderer
*/
void setSearchProtocolPrefix(const std::string& prefix);
/**
* set result count per page
*/
void setPageLength(unsigned int pageLength){
this->pageLength = pageLength;
}
/**
* Generate the html page with the resutls of the search.
*/
@@ -73,10 +80,9 @@ class SearchRenderer
std::string searchPattern;
std::string protocolPrefix;
std::string searchProtocolPrefix;
unsigned int resultCountPerPage;
unsigned int pageLength;
unsigned int estimatedResultCount;
unsigned int resultStart;
unsigned int resultEnd;
};

View File

@@ -31,7 +31,6 @@
#include <vector>
#include "tools/pathTools.h"
#include "tools/stringTools.h"
#include "kiwix_config.h"
using namespace std;

View File

@@ -56,7 +56,9 @@ namespace kiwix
void setNbThreads(int threads) { m_nbThreads = threads; }
void setVerbose(bool verbose) { m_verbose = verbose; }
void setTaskbar(bool withTaskbar, bool withLibraryButton)
{ m_withTaskbar = withTaskbar; m_withLibraryButton = withLibraryButton; }
{ m_withTaskbar = withTaskbar; m_withLibraryButton = withLibraryButton; }
void setBlockExternalLinks(bool blockExternalLinks)
{ m_blockExternalLinks = blockExternalLinks; }
protected:
Library* mp_library;
@@ -68,6 +70,7 @@ namespace kiwix
bool m_verbose = false;
bool m_withTaskbar = true;
bool m_withLibraryButton = true;
bool m_blockExternalLinks = false;
std::unique_ptr<InternalServer> mp_server;
};
}

View File

@@ -1,46 +0,0 @@
#ifndef KIWIXLIB_TOOL_LOCK_H
#define KIWIXLIB_TOOL_LOCK_H
#include <pthread.h>
namespace kiwix {
class Lock
{
public:
explicit Lock(pthread_mutex_t* mutex) :
mp_mutex(mutex)
{
pthread_mutex_lock(mp_mutex);
}
~Lock() {
if (mp_mutex != nullptr) {
pthread_mutex_unlock(mp_mutex);
}
}
Lock(Lock && other) :
mp_mutex(other.mp_mutex)
{
other.mp_mutex = nullptr;
}
Lock & operator=(Lock && other)
{
mp_mutex = other.mp_mutex;
other.mp_mutex = nullptr;
return *this;
}
private:
pthread_mutex_t* mp_mutex;
Lock(Lock const &) = delete;
Lock & operator=(Lock const &) = delete;
};
}
#endif //KIWIXLIB_TOOL_LOCK_H

View File

@@ -22,6 +22,8 @@
#include <string>
#include <vector>
#include <map>
#include <zim/zim.h>
namespace pugi {
class xml_node;
@@ -41,6 +43,8 @@ namespace kiwix
const std::string& tagName);
bool convertStrToBool(const std::string& value);
using MimeCounterType = std::map<const std::string, zim::entry_index_type>;
MimeCounterType parseMimetypeCounter(const std::string& counterData);
}
#endif

View File

@@ -29,5 +29,8 @@ std::string replaceRegex(const std::string& content,
std::string appendToFirstOccurence(const std::string& content,
const std::string& regex,
const std::string& replacement);
std::string prependToFirstOccurence(const std::string& content,
const std::string& regex,
const std::string& replacement);
#endif

View File

@@ -43,7 +43,7 @@ void loadICUExternalTables();
std::string urlEncode(const std::string& value, bool encodeReserved = false);
std::string urlDecode(const std::string& value, bool component = false);
std::vector<std::string> split(const std::string&, const std::string&, bool trimEmpty = true);
std::vector<std::string> split(const std::string& str, const std::string& delims, bool trimEmpty = true, bool keepDelim = false);
std::string join(const std::vector<std::string>& list, const std::string& sep);
std::string ucAll(const std::string& word);

View File

@@ -1,43 +1,63 @@
project('kiwix-lib', 'cpp',
version : '9.0.1', # Also change this in android-kiwix-lib-publisher/kiwixLibAndroid/build.gradle
license : 'GPL',
version : '10.0.0', # Also change this in android-kiwix-lib-publisher/kiwixLibAndroid/build.gradle
license : 'GPLv3+',
default_options : ['c_std=c11', 'cpp_std=c++11', 'werror=true'])
compiler = meson.get_compiler('cpp')
wrapper = get_option('wrapper')
static_deps = 'android' in wrapper or 'java' in wrapper or get_option('default_library') == 'static'
if 'android' in wrapper
static_deps = wrapper.contains('android') or wrapper.contains('java') or get_option('default_library') == 'static'
if wrapper.contains('android')
extra_libs = ['-llog']
else
extra_libs = []
endif
if 'java' in wrapper
if wrapper.contains('java')
add_languages('java')
endif
thread_dep = dependency('threads')
# See https://github.com/kiwix/kiwix-lib/issues/371
if ['arm', 'mips', 'm68k', 'ppc', 'sh4'].contains(target_machine.cpu_family())
extra_libs += '-latomic'
endif
if (compiler.get_id() == 'gcc' and build_machine.system() == 'linux') or target_machine.system() == 'freebsd'
# C++ std::thread is implemented using pthread on linux by gcc
thread_dep = dependency('threads')
else
thread_dep = dependency('', required:false)
endif
libicu_dep = dependency('icu-i18n', static:static_deps)
libzim_dep = dependency('libzim', version : '>=5.0.0', static:static_deps)
pugixml_dep = dependency('pugixml', static:static_deps)
libcurl_dep = dependency('libcurl', static:static_deps)
microhttpd_dep = dependency('libmicrohttpd', static:static_deps)
zlib_dep = dependency('zlib', static:static_deps)
if not compiler.has_header('mustache.hpp')
if compiler.has_header('mustache.hpp')
extra_include = []
elif compiler.has_header('mustache.hpp', args: '-I/usr/include/kainjow')
extra_include = ['/usr/include/kainjow']
else
error('Cannot found header mustache.hpp')
endif
libzim_dep = dependency('libzim', version : '>=7.0.0', static:static_deps)
if not compiler.has_header_symbol('zim/zim.h', 'LIBZIM_WITH_XAPIAN')
error('Libzim seems to be compiled without xapian. Xapian support is mandatory.')
endif
extra_cflags = ''
if target_machine.system() == 'windows' and static_deps
add_project_arguments('-DCURL_STATICLIB', language : 'cpp')
extra_cflags += '-DCURL_STATICLIB'
endif
all_deps = [thread_dep, libicu_dep, libzim_dep, pugixml_dep, libcurl_dep, microhttpd_dep]
all_deps = [thread_dep, libicu_dep, libzim_dep, pugixml_dep, libcurl_dep, microhttpd_dep, zlib_dep]
inc = include_directories('include')
inc = include_directories('include', extra_include)
conf = configuration_data()
conf.set('VERSION', '"@0@"'.format(meson.project_version()))
@@ -54,7 +74,7 @@ subdir('static')
subdir('src')
subdir('test')
pkg_requires = ['libzim', 'icu-i18n', 'pugixml', 'libcurl']
pkg_requires = ['libzim', 'icu-i18n', 'pugixml', 'libcurl', 'libmicrohttpd']
pkg_conf = configuration_data()
pkg_conf.set('prefix', get_option('prefix'))

10
prototype/README.md Normal file
View File

@@ -0,0 +1,10 @@
# kiwixprototype
Revamping the landing page
## I made a simple mockup using pages
![ROUGH SKETCH landingpage](https://user-images.githubusercontent.com/41134301/105805694-969e8080-5fc8-11eb-8ce4-dc85bcfa7a55.png)
![ROUGH SKETCH footer section](https://user-images.githubusercontent.com/41134301/105805730-ab7b1400-5fc8-11eb-9d47-b3fd7abc7cd4.png)
## and here's the final version
![kiwix1](https://user-images.githubusercontent.com/41134301/105805990-23e1d500-5fc9-11eb-81be-df0ff3210071.png)
![kiwix2](https://user-images.githubusercontent.com/41134301/105806018-2fcd9700-5fc9-11eb-911f-0552fb4f0b62.png)

View File

@@ -0,0 +1,132 @@
.uls-trigger {
background: url(../images/language.svg ) no-repeat left center;
padding-left: 24px;
}
.uls-menu {
position: absolute;
z-index: 1000;
display: none;
margin-top: 1px;
background-color: #fff;
border: 1px solid #ccc;
border-color: rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
}
.uls-wide {
min-width: 715px;
width: 45%;
}
.uls-medium {
min-width: 360px;
width: 30%;
}
/* Override the grid */
.uls-medium.grid .row {
min-width: 300px;
}
.uls-narrow {
min-width: 180px;
width: 20%;
}
/* Override the grid */
.uls-narrow.grid .row {
min-width: 150px;
}
.uls-search {
background-color: #fff;
padding: 5px 16px;
border-bottom: 1px solid #ddd;
}
.grid .uls-search {
padding-left: 0;
}
/* Make space for magnifying class on the front */
.uls-search-wrapper {
position: relative;
padding-left: 44px;
margin-right: 5px;
height: 32px;
}
.uls-search-label {
background: url(../images/search.svg ) no-repeat center center;
background-size: 20px;
height: 32px;
width: 44px;
display: block;
position: absolute;
left: 0;
opacity: 0.5;
}
.uls-search-input-wrapper {
position: relative;
}
/* There are two input boxes. This class applies to both of them */
.uls-filterinput {
font-size: 16px;
height: 32px;
width: 100%;
/* For the custom clear (X) icon */
padding: 6px 25px 6px 0;
outline: 0;
border: 0;
display: block;
position: absolute;
top: 0;
left: 0;
}
/* This is the actual input */
.uls-languagefilter {
background-color: transparent;
border: 0;
color: #222;
}
/* This is the shadow input box showing completion suggestions */
.uls-filtersuggestion {
background-color: #fff;
color: #777;
}
.uls-languagefilter-clear {
background: url(../images/close.svg ) no-repeat left center;
background-size: 15px;
cursor: pointer;
height: 15px;
width: 15px;
opacity: 0.7;
/* Vertical margins: (32 - 15) / 2 */
margin: 8.5px 5px;
position: absolute;
right: 0;
/* Make it appear above the input boxes */
z-index: 1;
}
div.navbar {
padding: 20px;
}
span.uls-trigger {
float: right;
cursor: pointer;
font-weight: bold;
}

View File

@@ -0,0 +1,307 @@
/* Generated using Foundation http://foundation.zurb.com/docs/grid.php */
/* Global Reset & Standards ---------------------- */
.grid * {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/* Misc ---------------------- */
.grid .left {
float: left;
}
.grid .right {
float: right;
}
.grid .text-left {
text-align: left;
}
.grid .text-right {
text-align: right;
}
.grid .text-center {
text-align: center;
}
.grid .hide {
display: none;
}
.grid .highlight {
background: #ff9;
}
/* The Grid ---------------------- */
.grid .row {
width: 100%;
max-width: none;
min-width: 600px;
margin: 0 auto;
}
.grid .row .row {
width: auto;
max-width: none;
min-width: 0;
margin: 0 -5px;
}
.grid .column,
.grid .columns {
float: left;
min-height: 1px;
padding: 0 5px;
position: relative;
}
.grid .row.collapse .column,
.grid .row.collapse .columns {
padding: 0;
}
.grid .row .row.collapse {
margin: 0;
}
.grid .column.centered,
.grid .columns.centered {
float: none;
margin: 0 auto;
}
.grid .row .one {
width: 8.333%;
}
.grid .row .two {
width: 16.667%;
}
.grid .row .three {
width: 25%;
}
.grid .row .four {
width: 33.333%;
}
.grid .row .five {
width: 41.667%;
}
.grid .row .six {
width: 50%;
}
.grid .row .seven {
width: 58.333%;
}
.grid .row .eight {
width: 66.667%;
}
.grid .row .nine {
width: 75%;
}
.grid .row .ten {
width: 83.333%;
}
.grid .row .eleven {
width: 91.667%;
}
.grid .row .twelve {
width: 100%;
}
.grid .row .offset-by-one {
margin-left: 8.333%;
}
.grid .row .offset-by-two {
margin-left: 16.667%;
}
.grid .row .offset-by-three {
margin-left: 25%;
}
.grid .row .offset-by-four {
margin-left: 33.333%;
}
.grid .row .offset-by-five {
margin-left: 41.667%;
}
.grid .row .offset-by-six {
margin-left: 50%;
}
.grid .row .offset-by-seven {
margin-left: 58.333%;
}
.grid .row .offset-by-eight {
margin-left: 66.667%;
}
.grid .row .offset-by-nine {
margin-left: 75%;
}
.grid .row .offset-by-ten {
margin-left: 83.333%;
}
.grid .push-two {
left: 16.667%;
}
.grid .pull-two {
right: 16.667%;
}
.grid .push-three {
left: 25%;
}
.grid .pull-three {
right: 25%;
}
.grid .push-four {
left: 33.333%;
}
.grid .pull-four {
right: 33.333%;
}
.grid .push-five {
left: 41.667%;
}
.grid .pull-five {
right: 41.667%;
}
.grid .push-six {
left: 50%;
}
.grid .pull-six {
right: 50%;
}
.grid .push-seven {
left: 58.333%;
}
.grid .pull-seven {
right: 58.333%;
}
.grid .push-eight {
left: 66.667%;
}
.grid .pull-eight {
right: 66.667%;
}
.grid .push-nine {
left: 75%;
}
.grid .pull-nine {
right: 75%;
}
.grid .push-ten {
left: 83.333%;
}
.grid .pull-ten {
right: 83.333%;
}
.grid .row:before,
.grid .row:after {
content: '';
display: table;
}
.grid .row:after {
clear: both;
}
/* Block Grids ---------------------- */
/* These are 2-up, 3-up, 4-up and 5-up ULs, suited
for repeating blocks of content. Add 'mobile' to
them to switch them just like the layout grid
(one item per line) on phones
For IE7/8 compatibility block-grid items need to be
the same height. You can optionally uncomment the
lines below to support arbitrary height, but know
that IE7/8 do not support :nth-child.
-------------------------------------------------- */
.grid .block-grid {
display: block;
overflow: hidden;
padding: 0;
}
.grid .block-grid > li {
display: block;
height: auto;
float: left;
}
.grid .block-grid.two-up {
margin: 0 -15px;
}
.grid .block-grid.two-up > li {
width: 50%;
padding: 0 15px 15px;
}
/* .block-grid.two-up>li:nth-child(2n+1) {clear: left;} */
.grid .block-grid.three-up {
margin: 0 -12px;
}
.grid .block-grid.three-up > li {
width: 33.33%;
padding: 0 12px 12px;
}
/* .block-grid.three-up>li:nth-child(3n+1) {clear: left;} */
.grid .block-grid.four-up {
margin: 0 -10px;
}
.grid .block-grid.four-up > li {
width: 25%;
padding: 0 10px 10px;
}
/* .block-grid.four-up>li:nth-child(4n+1) {clear: left;} */
.grid .block-grid.five-up {
margin: 0 -8px;
}
.grid .block-grid.five-up > li {
width: 20%;
padding: 0 8px 8px;
}

View File

@@ -0,0 +1,140 @@
/*
* Language Category Display (LCD) consists of multiple sections:
* - one to display when there are no search results (which might display suggested languages)
* - one for each region of the world, plus regions for world languages and suggested languages
* The regions consist of one or more rows (blocks) which consist of one-to-four columns. Each
* column is an ul element, and contains up to 8 li elements, each containing a link.
*/
.uls-lcd {
background-color: #fcfcfc;
height: 20em;
/* Work around Chrome bug where it places scrollbar on the left in
* in RTL mode but actually reserves the place on the right side */
overflow-x: hidden;
overflow-y: auto;
width: auto;
padding: 0 16px;
}
.uls-lcd-region-title {
color: #555;
font-size: 14px;
padding-left: 28px;
}
.uls-lcd--no-quicklist [ data-region='all' ] .uls-lcd-region-title {
display: none;
}
.uls-lcd-region-section {
margin-top: 10px;
}
/*
* We need to have this as a grid row to push rest of the content below it, but resetting
* padding and margin so that calculating them for children is easier.
*/
.grid .uls-language-block.row {
padding: 0;
margin: 0;
}
.uls-language-block > ul {
/*
* We don't want any visible bullets in this list. Not by default anyway.
* Using very unspecific selector here to allow other classes to override.
* Bug because overflow: hidden is incompatible with bullets, also render
* the bullets inside the list in case there should be any.
*/
list-style: none none;
}
/*
* Each block should have 16px padding on both sides. But because we already gave
* 16px for the whole menu, we need to remove it for first and last items the blocks.
*/
.grid .uls-language-block > ul {
margin: 0 0 20px 0;
padding: 0 16px;
}
.grid .uls-language-block > ul:first-child {
padding-left: 0;
}
.grid .uls-language-block > ul:last-child {
padding-right: 0;
}
.uls-language-block > ul > li {
cursor: pointer;
margin-left: 20px;
padding: 8px;
/*
* The directionality (ltr/rtl) for each list item is set dynamically
* as HTML attributes in JavaScript. Setting directionality also applies
* alignment, but a list with mixed alignment is hard to read.
* All items are therefore explicitly aligned to the left, including names
* of right-to-left languages in left-to-right environment and vice versa.
* As long as the directionality of the item is set correctly, the text
* is readable.
*/
text-align: left;
}
.uls-language-block > ul > li:hover {
background-color: #eaeff7;
}
.uls-language-block a {
cursor: pointer;
text-decoration: none;
color: #36c;
font-size: 14px;
display: inline-block;
width: 100%;
overflow-x: hidden;
/*
* Some languages have long names for various reasons and we still want
* them to appear on one line.
* To make it work correctly, the directionality must be set correctly
* on the item level.
*/
text-overflow: ellipsis;
white-space: nowrap;
vertical-align: middle;
}
.uls-no-results-view {
display: none;
}
.uls-lcd.uls-no-results > .uls-lcd-region-section {
display: none;
}
.uls-lcd.uls-no-results > .uls-no-results-view {
display: block;
}
.uls-no-results-found-title {
font-size: 16px;
padding: 0 16px 0 28px;
margin: 20px 0;
border-bottom: 0;
color: #54595d;
}
.uls-no-found-more {
border-top: 1px solid #eaecf0;
color: #54595d;
padding: 12px 16px 12px 44px;
font-size: 0.9em;
width: 100%;
margin-top: 1.6em;
line-height: 1.6em;
position: absolute;
bottom: 0;
left: 0;
}

View File

@@ -0,0 +1,307 @@
/* stylelint-disable declaration-no-important */
@media only screen and ( max-width: 767px ) {
.uls-mobile.uls-menu {
width: 95%;
left: 2.5%;
}
.uls-mobile .uls-language-list {
-webkit-overflow-scrolling: touch;
}
.uls-mobile .uls-language-block {
padding-left: 15px !important;
}
.uls-mobile .uls-language-block ul {
min-height: 14em;
}
.uls-mobile .uls-language-block a {
font-size: 16px;
line-height: 1.7em;
}
.uls-mobile .row {
width: auto;
min-width: 0;
margin-left: 0;
margin-right: 0;
}
.uls-mobile .column,
.uls-mobile .columns {
width: auto !important;
float: none;
}
.uls-mobile .column:last-child,
.uls-mobile .columns:last-child {
float: none;
}
.uls-mobile [ class*='column' ] + [ class*='column' ]:last-child {
float: none;
}
.uls-mobile .column:before,
.uls-mobile .uls-mobile .columns:before,
.uls-mobile .column:after,
.columns:after {
content: '';
display: table;
}
.uls-mobile .column:after,
.uls-mobile .columns:after {
clear: both;
}
.uls-mobile .offset-by-one,
.uls-mobile .offset-by-two,
.uls-mobile .offset-by-three,
.uls-mobile .offset-by-four,
.uls-mobile .offset-by-five,
.uls-mobile .offset-by-six,
.uls-mobile .offset-by-seven,
.uls-mobile .offset-by-eight,
.uls-mobile .offset-by-nine,
.uls-mobile .offset-by-ten {
margin-left: 0 !important;
}
.uls-mobile .push-two,
.uls-mobile .push-three,
.uls-mobile .push-four,
.uls-mobile .push-five,
.uls-mobile .push-six,
.uls-mobile .push-seven,
.uls-mobile .push-eight,
.uls-mobile .push-nine,
.uls-mobile .push-ten {
left: auto;
}
.uls-mobile .pull-two,
.uls-mobile .pull-three,
.uls-mobile .pull-four,
.uls-mobile .pull-five,
.uls-mobile .pull-six,
.uls-mobile .pull-seven,
.uls-mobile .pull-eight,
.uls-mobile .pull-nine,
.uls-mobile .pull-ten {
right: auto;
}
/* Mobile 4-column Grid */
.uls-mobile .row .mobile-one {
width: 25% !important;
float: left;
padding: 0 4px;
}
.uls-mobile .row .mobile-one:last-child {
float: right;
}
.uls-mobile .row.collapse .mobile-one {
padding: 0;
}
.uls-mobile .row .mobile-two {
width: 50% !important;
float: left;
padding: 0 4px;
}
.uls-mobile .row .mobile-two:last-child {
float: right;
}
.uls-mobile .row.collapse .mobile-two {
padding: 0;
}
.uls-mobile .row .mobile-three {
width: 75% !important;
float: left;
padding: 0 4px;
}
.uls-mobile .row .mobile-three:last-child {
float: right;
}
.uls-mobile .row.collapse .mobile-three {
padding: 0;
}
.uls-mobile .row .mobile-four {
width: 100% !important;
float: left;
padding: 0 4px;
}
.uls-mobile .row .mobile-four:last-child {
float: right;
}
.uls-mobile .row.collapse .mobile-four {
padding: 0;
}
.uls-mobile .push-one-mobile {
left: 25%;
}
.uls-mobile .pull-one-mobile {
right: 25%;
}
.uls-mobile .push-two-mobile {
left: 50%;
}
.uls-mobile .pull-two-mobile {
right: 50%;
}
.uls-mobile .push-three-mobile {
left: 75%;
}
.uls-mobile .pull-three-mobile {
right: 75%;
}
}
/* Visibility Classes ---------------------- */
/* Standard (large) display targeting */
.uls-mobile .show-for-small,
.uls-mobile .show-for-medium,
.uls-mobile .show-for-medium-down,
.uls-mobile .hide-for-large,
.uls-mobile .hide-for-large-up,
.uls-mobile .show-for-xlarge {
display: none !important;
}
.uls-mobile .hide-for-xlarge,
.uls-mobile .show-for-large,
.uls-mobile .show-for-large-up,
.uls-mobile .hide-for-small,
.uls-mobile .hide-for-medium,
.uls-mobile .hide-for-medium-down {
display: block !important;
}
/* Very large display targeting */
@media only screen and ( min-width: 1441px ) {
.uls-mobile .hide-for-small,
.uls-mobile .hide-for-medium,
.uls-mobile .hide-for-medium-down,
.hide-for-large,
.show-for-large-up,
.show-for-xlarge {
display: block !important;
}
.show-for-small,
.uls-mobile .show-for-medium,
.uls-mobile .show-for-medium-down,
.uls-mobile .show-for-large,
.uls-mobile .hide-for-large-up,
.uls-mobile .hide-for-xlarge {
display: none !important;
}
}
/* Medium display targeting */
@media only screen and ( max-width: 1279px ) and ( min-width: 768px ) {
.uls-mobile .hide-for-small,
.uls-mobile .show-for-medium,
.uls-mobile .show-for-medium-down,
.uls-mobile .hide-for-large,
.uls-mobile .hide-for-large-up,
.uls-mobile .hide-for-xlarge {
display: block !important;
}
.uls-mobile .show-for-small,
.uls-mobile .hide-for-medium,
.uls-mobile .hide-for-medium-down,
.uls-mobile .show-for-large,
.uls-mobile .show-for-large-up,
.uls-mobile .show-for-xlarge {
display: none !important;
}
}
/* Small display targeting */
@media only screen and ( max-width: 767px ) {
.uls-mobile .show-for-small,
.uls-mobile .hide-for-medium,
.uls-mobile .show-for-medium-down,
.uls-mobile .hide-for-large,
.uls-mobile .hide-for-large-up,
.uls-mobile .hide-for-xlarge {
display: block !important;
}
.uls-mobile .hide-for-small,
.uls-mobile .show-for-medium,
.uls-mobile .hide-for-medium-down,
.uls-mobile .show-for-large,
.uls-mobile .show-for-large-up,
.uls-mobile .show-for-xlarge {
display: none !important;
}
}
/* Orientation targeting */
.uls-mobile .show-for-landscape,
.uls-mobile .hide-for-portrait {
display: block !important;
}
.uls-mobile .hide-for-landscape,
.uls-mobile .show-for-portrait {
display: none !important;
}
@media screen and ( orientation: landscape ) {
.uls-mobile .show-for-landscape,
.uls-mobile .hide-for-portrait {
display: block !important;
}
.uls-mobile .hide-for-landscape,
.uls-mobile .show-for-portrait {
display: none !important;
}
}
@media screen and ( orientation: portrait ) {
.uls-mobile .show-for-portrait,
.uls-mobile .hide-for-landscape {
display: block !important;
}
.uls-mobile .hide-for-portrait,
.uls-mobile .show-for-landscape {
display: none !important;
}
}
/* Touch-enabled device targeting */
.uls-mobile .show-for-touch,
.uls-mobile .touch .hide-for-touch {
display: none !important;
}
/* stylelint-disable-next-line no-descending-specificity */
.uls-mobile .hide-for-touch,
.uls-mobile .touch .show-for-touch {
display: block !important;
}

505
prototype/css/style.css Normal file
View File

@@ -0,0 +1,505 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#main {
width: 100%;
height: 100%;
background: linear-gradient(180deg, #ff9933 0%, rgba(64, 38, 13, 1) 73%);
background-size: cover;
}
nav {
width: 100%;
height: 80px;
line-height: 80px;
}
nav ul {
float: left;
margin-right: 30px;
}
/* changes at kiwix logo */
nav .kiwix-logo {
float: left;
height: 60px;
width: 150px;
margin: 10px;
}
nav ul li {
list-style-type: none;
display: inline-block;
transition: 0.8s all;
}
nav ul li:hover {
background-color: #f39d1a;
}
nav ul li a {
text-decoration: none;
color: #fff;
padding: 30px;
}
/* code for search box */
#content {
position: absolute;
top: 50px;
right: 50px;
transform: translate(0%, -50%);
}
#content.on {
-webkit-animation-name: in-out;
animation-name: in-out;
-webkit-animation-duration: 0.7s;
animation-duration: 0.7s;
-webkit-animation-timing-function: linear;
animation-timing-function: linear;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
}
input {
box-sizing: border-box;
width: 30px;
height: 30px;
border: 2px solid #ffffff;
border-radius: 50%;
background: none;
color: #fff;
font-size: 16px;
font-weight: 400;
font-family: Roboto;
outline: 0;
-webkit-transition: width 0.4s ease-in-out, border-radius 0.8s ease-in-out,
padding 0.2s;
transition: width 0.4s ease-in-out, border-radius 0.8s ease-in-out,
padding 0.2s;
-webkit-transition-delay: 0.4s;
transition-delay: 0.4s;
-webkit-transform: translate(-100%, -50%);
-ms-transform: translate(-100%, -50%);
transform: translate(-100%, -50%);
}
.search {
background: none;
position: absolute;
top: 24px;
left: 0;
height: 50px;
width: 50px;
padding: 0;
border-radius: 100%;
outline: 0;
border: 0;
color: inherit;
cursor: pointer;
-webkit-transition: 0.2s ease-in-out;
transition: 0.2s ease-in-out;
-webkit-transform: translate(-100%, -50%);
-ms-transform: translate(-100%, -50%);
transform: translate(-100%, -50%);
}
.search:before {
content: "";
position: absolute;
width: 20px;
height: 4px;
background-color: #fff;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
margin-top: 17px;
margin-left: 17px;
-webkit-transition: 0.2s ease-in-out;
transition: 0.2s ease-in-out;
}
.close {
-webkit-transition: 0.4s ease-in-out;
transition: 0.4s ease-in-out;
-webkit-transition-delay: 0.4s;
transition-delay: 0.4s;
}
.close:before {
content: "";
position: absolute;
width: 20px;
height: 3px;
margin-top: -1px;
margin-left: -2px;
background-color: #fff;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transition: 0.2s ease-in-out;
transition: 0.2s ease-in-out;
}
.close:after {
content: "";
position: absolute;
width: 20px;
height: 3px;
background-color: #fff;
margin-top: -1px;
margin-left: -2px;
cursor: pointer;
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.square {
box-sizing: border-box;
padding: 0 40px 0 10px;
width: 300px;
height: 30px;
border: 2px solid #ffffff;
border-radius: 100vh;
background: none;
color: #fff;
font-family: Roboto;
font-size: 16px;
font-weight: 400;
outline: 0;
-webkit-transition: width 0.4s ease-in-out, border-radius 0.4s ease-in-out,
padding 0.2s;
transition: width 0.4s ease-in-out, border-radius 0.4s ease-in-out,
padding 0.2s;
-webkit-transition-delay: 0.4s, 0s, 0.4s;
transition-delay: 0.4s, 0s, 0.4s;
-webkit-transform: translate(-100%, -50%);
-ms-transform: translate(-100%, -50%);
transform: translate(-100%, -50%);
}
/* language selector */
.ui-dropdown-list {
position: relative;
}
p.ui-dropdown-list-trigger {
margin-top: 0;
}
.ui-dropdown-list-trigger strong {
position: relative;
z-index: 999;
}
.ui-dropdown-list-trigger strong:after {
display: block;
position: absolute;
content: '';
right: 5px;
top: 35px;
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid #ffffff;
}
.ui-dropdown-list-trigger strong,
.ui-dropdown-list ul a {
display: block;
width: 80px;
cursor: pointer;
padding: 30px 8px;
font-size: 13px;
line-height: 13px;
color: #ffffff;
font-weight: normal;
}
#lang-switcher strong {
float: right;
}
/* information contents */
.boxes {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-around;
padding: 60px;
}
.box {
display: flex;
flex-direction: column;
text-align: center;
width: 350px;
height: auto;
background: url('./images/bg-pattern-card.svg') no-repeat top white;
border-radius: 20px;
margin: auto;
margin-top: 10%;
box-shadow: 10px 10px 100px rgba(0, 0, 0, 0.363);
}
.photo {
background-color: transparent;
}
.photo img {
margin-top: -7%;
border-radius: 50%;
}
.gras {
font-weight: 700;
}
.grey {
color: hsl(0, 0%, 59%);
font-weight: 400;
}
.content_info {
justify-content: center;
padding-top: 10px;
padding-bottom: 10px;
border-bottom: 1px solid hsl(0, 0%, 70%);
}
.content_info .gras {
padding-right: 5px;
}
.content_stats {
display: flex;
flex-direction: row;
justify-content: space-evenly;
align-content: center;
padding-top: 30px;
padding-bottom: 30px;
padding-left: 0px;
padding-right: 15px;
padding: 10px 0 10px 0;
}
p {
padding-bottom: 5px;
text-align: center;
margin: 0;
}
@media screen and (max-width: 375px) {
html {
width: 375px;
}
.boxes {
padding: 0;
}
.box {
margin-top: 40%;
}
}
.pagination ul {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
padding: 8px;
border-radius: 50px;
box-shadow: 0px 10px 15px rgba(0, 0, 0, 0.1);
}
.pagination ul li {
color: chocolate;
list-style: none;
line-height: 45px;
text-align: center;
font-size: 18px;
font-weight: 500;
cursor: pointer;
user-select: none;
transition: all 0.3s ease;
}
.pagination ul li.numb {
list-style: none;
height: 45px;
width: 45px;
margin: 0 3px;
line-height: 45px;
border-radius: 50%;
}
.pagination ul li.numb.first {
margin: 0px 3px 0 -5px;
}
.pagination ul li.numb.last {
margin: 0px -5px 0 3px;
}
.pagination ul li.dots {
font-size: 22px;
cursor: default;
}
.pagination ul li.btn {
padding: 0 20px;
border-radius: 50px;
}
.pagination li.active,
.pagination ul li.numb:hover,
.pagination ul li:first-child:hover,
.pagination ul li:last-child:hover {
color: #fff;
background: #ff9933;
}
ul {
list-style-type: none;
}
a {
text-decoration: none;
color: white;
transition: color 0.5s ease;
}
a:hover {
color: wheat;
}
.spacing {
height: 400px;
}
.design {
width: 100%;
height: 100px;
display: flex;
justify-content: space-between;
align-items: center;
background: white;
color: #fff;
padding: 0 4rem;
}
.footer {
width: 100%;
height: auto;
/* this is how change the color */
background: linear-gradient(180deg, #40260d 73%, #000);
}
.container {
max-width: 85%;
margin: 0 auto;
padding: 2rem 0;
}
.footer-group__container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.footer-group {
align-self: stretch;
padding: 0.4rem 1rem;
flex: 1 0 280px;
}
.footer-group__header {
color: #ff9933;
text-transform: uppercase;
font-size: 1.2rem;
letter-spacing: -1px;
word-spacing: 0.2rem;
font-weight: 500;
margin-bottom: 1.2rem;
}
.footer-group__item {
font-size: 0.85rem;
font-weight: 400;
margin-bottom: 0.6rem;
text-transform: capitalize;
}
.footer-group__lead {
/* font-weight:600; */
width: 100%;
}
.visually-hidden {
display: none;
/* TODO proper implementation */
}
.footer-footnote,
.footnote__items {
display: flex;
font-size: 0.8rem;
}
.footnote__copyright,
.footnote__items {
margin: 1rem 0;
}
.footer-footnote {
flex-wrap: wrap;
font-weight: 600;
padding: 0.25rem 1rem;
color: white;
background: #915e35;
}
.footnote__copyright {
flex: 2 0 50%;
}
@media (max-width: 998px) {
.footnote__copyright {
flex: 1 0 50%;
}
}
.footnote__items {
flex: 1 0 50%;
justify-content: flex-end;
}
.footnote__item {
margin: 0 1rem;
}
@media (max-width: 580px) {
.footer-footnote {
flex-direction: column-reverse;
}
}

View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Csisc"
]
},
"uls-region-WW": "Ģālemīye",
"uls-region-SP": "Spēsyāl",
"uls-region-AM": "Emerīke",
"uls-region-AF": "Ifrīqye",
"uls-region-EU": "Ūrūppe",
"uls-region-AS": "Ēsye",
"uls-region-ME": "Ic-carq il-awsaţ",
"uls-region-PA": "Il-Mūḩīţ il-hēdī",
"uls-no-results-found": "Mē fammēc ḩattā rēzülta",
"uls-common-languages": "Lūğāt muntacra",
"uls-no-results-suggestion-title": "Tnejjim tkūn muhtam b-:",
"uls-search-help": "Tnejjim tlawwij ḩasb ism il-lūğa, ism il-kod, il-kod ISO mtēģ il-lūğa w illē ḩasb ij-jīhe",
"uls-search-placeholder": "Lawwij ģlā il-lūğa"
}

26
prototype/i18n/af.json Normal file
View File

@@ -0,0 +1,26 @@
{
"@metadata": {
"authors": [
"Amire80",
"Biggs ZA",
"Fwolff",
"Joris Darlington Quarshie",
"Naudefj",
"Puvircho"
]
},
"uls-region-WW": "Wêreldwyd",
"uls-region-SP": "Spesiaal",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asië",
"uls-region-ME": "Midde-Ooste",
"uls-region-PA": "Stille Oseaan",
"uls-region-all": "Alle tale",
"uls-no-results-found": "Geen resultate gevind nie",
"uls-common-languages": "Voorgestelde tale",
"uls-no-results-suggestion-title": "U mag geïnteresseerd wees in:",
"uls-search-help": "Soek gerus volgens taalnaam, skrifnaam of ISO-kode, of blaai volgens streek.",
"uls-search-placeholder": "Soek na n taal"
}

22
prototype/i18n/am.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Andemta",
"Elfalem"
]
},
"uls-region-WW": "ዓለም አቀፍ",
"uls-region-SP": "ልዩ",
"uls-region-AM": "አሜሪካ",
"uls-region-AF": "አፍሪካ",
"uls-region-EU": "አውሮጳ",
"uls-region-AS": "እስያ",
"uls-region-ME": "መካከለኛው ምሥራቅ",
"uls-region-PA": "ፓሲፊክ",
"uls-region-all": "ሁሉ ቋንቋ",
"uls-no-results-found": "ውጤት አልተገኘም",
"uls-common-languages": "ተመራጭ ቋንቋዎች",
"uls-no-results-suggestion-title": "ይህ ሊመስጦት ይችላል:",
"uls-search-help": "በቋንቋ ስም፣ የአፃፃፍ ሥርዓት ስም፣ አይ.ኤስ.ኦ. (ISO) ኮድ መፈለግ ወይም በአካባቢ መቃኘት ይቻላል::",
"uls-search-placeholder": "ቋንቋ ለመፈለግ"
}

21
prototype/i18n/anp.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Angpradesh"
]
},
"uls-region-WW": "वैश्विक",
"uls-region-SP": "खास",
"uls-region-AM": "अमरीका",
"uls-region-AF": "अफ़्रीका",
"uls-region-EU": "यूरोप",
"uls-region-AS": "एशिया",
"uls-region-ME": "मध्य पूर्व",
"uls-region-PA": "प्रशांत",
"uls-region-all": "सब्भे भाषा",
"uls-no-results-found": "कोय परिणाम नै मिललै",
"uls-common-languages": "आम भाषा सिनी",
"uls-no-results-suggestion-title": "आपन॑ लेली संभवतः उपयोगी:",
"uls-search-help": "आपन॑ भाषा केरऽ नाम , स्क्रिप्ट केरऽ नाम , भाषा केरऽ आईएसओ कोड सं॑ खोज॑ सकै छहो या आपन॑ क्षेत्र के नाम सं॑ ब्राउज़ कर॑ सकै छहऽ.",
"uls-search-placeholder": "भाषा लेली खोजऽ"
}

26
prototype/i18n/ar.json Normal file
View File

@@ -0,0 +1,26 @@
{
"@metadata": {
"authors": [
"Amire80",
"DRIHEM",
"Hhaboh162002",
"Meno25",
"ترجمان05",
"ديفيد"
]
},
"uls-region-WW": "في جميع أنحاء العالم",
"uls-region-SP": "الخاصة",
"uls-region-AM": "أمريكا",
"uls-region-AF": "أفريقيا",
"uls-region-EU": "أوروبا",
"uls-region-AS": "آسيا",
"uls-region-ME": "الشرق الأوسط",
"uls-region-PA": "المحيط الهادئ",
"uls-region-all": "جميع اللغات",
"uls-no-results-found": "لم يتم العثور على نتائج",
"uls-common-languages": "اللغات المقترحة",
"uls-no-results-suggestion-title": "قد تكون مهتما بما يلي:",
"uls-search-help": "يمكنك البحث مستخدما اسم اللغة، أو اسم السكريبت، أو رمز اللغة القياسي أو يمكنك التصفح حسب المنطقة.",
"uls-search-placeholder": "بحث عن لغة"
}

22
prototype/i18n/arz.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Meno25",
"UpDownUp"
]
},
"uls-region-WW": "لغات عالمية",
"uls-region-SP": "لغات خاصّة",
"uls-region-AM": "أمريكا",
"uls-region-AF": "إفريقيا",
"uls-region-EU": "أوروپّا",
"uls-region-AS": "آسيا",
"uls-region-ME": "الشرق الأوسط",
"uls-region-PA": "المحيط الهادي",
"uls-region-all": "كل اللغات",
"uls-no-results-found": "مفيش أي نتايج",
"uls-common-languages": "اللغات المقترحة",
"uls-no-results-suggestion-title": "يمكن تكون مهتم بـ:",
"uls-search-help": "ممكن تدور حسب اسم اللغه، اسم نظام الكتابه\\الخط، كود الـ ISO بتاع اللغه أو ممكن تتصفح حسب المنطقه.",
"uls-search-placeholder": "دوّر على لغة"
}

23
prototype/i18n/as.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Dibya Dutta",
"Mohsin Ali",
"Nilamdyuti"
]
},
"uls-region-WW": "বিশ্বব্যাপী",
"uls-region-SP": "বিশেষ",
"uls-region-AM": "আমেৰিকা",
"uls-region-AF": "আফ্ৰিকা",
"uls-region-EU": "ইউৰোপ",
"uls-region-AS": "এছিয়া",
"uls-region-ME": "মধ্যপ্রাচ্য",
"uls-region-PA": "পেচিফিক",
"uls-region-all": "সকলো ভাষা",
"uls-no-results-found": "কোনো ফলাফল পোৱা নগ'ল",
"uls-common-languages": "পৰামৰ্শমূলক ভাষাসমূহ",
"uls-no-results-suggestion-title": "আপুনি আগ্ৰহী হ'ব পাৰে:",
"uls-search-help": "আপুনি ভাষাৰ নাম, লিপিৰ নাম, ভাষাৰ ISO ক'ড সাপেক্ষে সন্ধান কৰিব পাৰে অথবা অঞ্চল সাপেক্ষে ব্ৰাউজ কৰিব পাৰে।",
"uls-search-placeholder": "ভাষা এটাৰ সন্ধান কৰক"
}

21
prototype/i18n/ast.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Xuacu"
]
},
"uls-region-WW": "Mundial",
"uls-region-SP": "Especiales",
"uls-region-AM": "América",
"uls-region-AF": "África",
"uls-region-EU": "Europa",
"uls-region-AS": "Asia",
"uls-region-ME": "Oriente mediu",
"uls-region-PA": "Pacíficu",
"uls-region-all": "Toles llingües",
"uls-no-results-found": "Nun s'alcontraron resultaos",
"uls-common-languages": "Llingües suxeríes",
"uls-no-results-suggestion-title": "Seique t'interese:",
"uls-search-help": "Pues buscar pol nome de la llingua, nome del alfabetu, códigu ISO de la llingua o ver un área xeográfica.",
"uls-search-placeholder": "Buscar una llingua"
}

20
prototype/i18n/av.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Gazimagomedov"
]
},
"uls-region-WW": "ГӀаламиял",
"uls-region-SP": "Хассал",
"uls-region-AM": "Америка",
"uls-region-AF": "Африка",
"uls-region-EU": "Европа",
"uls-region-AS": "Азия",
"uls-region-ME": "АскӀосаб Магъриб",
"uls-region-PA": "Океания",
"uls-no-results-found": "Щибниги жо батинчӀо",
"uls-common-languages": "Жалго жедедаго рищарал мацӀал",
"uls-no-results-suggestion-title": "Дур интерес гьал мацӀазда ккезе батила:",
"uls-search-help": "МацӀалъул яги хъвай-хъваялъул цӀаразда рекъон цӀехезе бегьула, яги мацӀалъул ISO-кодалда рекъон. Гьединго бегьула регион бищун балагьизе:",
"uls-search-placeholder": "МацӀ цӀехей"
}

23
prototype/i18n/awa.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"1AnuraagPandey",
"1PandeyAnurag",
"Ajeetsinghawadh"
]
},
"uls-region-WW": "वैश्विक",
"uls-region-SP": "विशेष",
"uls-region-AM": "अमेरिका",
"uls-region-AF": "अफ्रिका",
"uls-region-EU": "यूरोप",
"uls-region-AS": "एशिया",
"uls-region-ME": "मध्य पुरुब",
"uls-region-PA": "प्रशांत",
"uls-region-all": "कुल भाषा",
"uls-no-results-found": "कवनो नतिजा नाई मिला",
"uls-common-languages": "सुझाई गय भाषा",
"uls-no-results-suggestion-title": "आप कय लिये संभवतः उपयोगी:",
"uls-search-help": "आप भाषा कय नाँव,लिपि नाँव,भाषा कय आई.एस.ओ कोड अव क्षेत्र कय नाँव से खोज सका जात अहै ।",
"uls-search-placeholder": "भाषा खोज"
}

24
prototype/i18n/az.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"AZISS",
"Khan27",
"Wertuose",
"Şeyx Şamil"
]
},
"uls-region-WW": "Dünya üzrə",
"uls-region-SP": "Xüsusi",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Avropa",
"uls-region-AS": "Asiya",
"uls-region-ME": "Yaxın Şərq",
"uls-region-PA": "Okeaniya",
"uls-region-all": "Bütün dillər",
"uls-no-results-found": "Nəticələr tapılmadı",
"uls-common-languages": "Təklif edilən dillər",
"uls-no-results-suggestion-title": "Sizin üçün maraqlı ola bilər:",
"uls-search-help": "Siz dilin adı, yazısı və ISO-kodu üzrə və ya region üzrə axtarış edə bilərsiz.",
"uls-search-placeholder": "Dili axtar"
}

23
prototype/i18n/azb.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Alp Er Tunqa",
"Arjanizary",
"Mousa"
]
},
"uls-region-WW": "دونیا بویو",
"uls-region-SP": "مخصوص",
"uls-region-AM": "آمریکا",
"uls-region-AF": "آفریقا",
"uls-region-EU": "اوروپا",
"uls-region-AS": "آسیا",
"uls-region-ME": "اورتادوغو",
"uls-region-PA": "بؤیوک اوقیانوس",
"uls-region-all": "بۆتون دیللر",
"uls-no-results-found": "هئچ نتیجه تاپیلمادی",
"uls-common-languages": "یایغین دیل‌لر",
"uls-no-results-suggestion-title": "بونلارا ماراقلی اولابیلرسینیز:",
"uls-search-help": "سیز دیل آدی، یازی آدی، دیلین ISO کودو، یوخسا بؤلگه ایله آختارا بیلرسینیز.",
"uls-search-placeholder": "بیر دیلی آختار"
}

22
prototype/i18n/ba.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Sagan",
"Ләйсән"
]
},
"uls-region-WW": "Бөтә донъя",
"uls-region-SP": "Махсус",
"uls-region-AM": "Америка",
"uls-region-AF": "Африка",
"uls-region-EU": "Европа",
"uls-region-AS": "Азия",
"uls-region-ME": "Яҡын Көнсығыш",
"uls-region-PA": "Океания",
"uls-region-all": "Бөтә телдәр",
"uls-no-results-found": "Бер нимә лә табылманы",
"uls-common-languages": "Тәҡдим ителгән телдәр",
"uls-no-results-suggestion-title": "Бәлки, ошо телдәрҙе һайларһығыҙ:",
"uls-search-help": "Телдең исеме, яҙмаһы, ISO коды йәки регионы буйынса эҙләй алаһығыҙ.",
"uls-search-placeholder": "Тел буйынса эҙләү"
}

22
prototype/i18n/ban.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Chinamoonroll",
"Joseagush"
]
},
"uls-region-WW": "Gumi makejang",
"uls-region-SP": "Rahina",
"uls-region-AM": "Amérika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Éropa",
"uls-region-AS": "Asia",
"uls-region-ME": "Timur Tengah",
"uls-region-PA": "Pasifik",
"uls-region-all": "Basa makejang",
"uls-no-results-found": "Tusing ade hasil",
"uls-common-languages": "Basa sane mapiteket",
"uls-no-results-suggestion-title": "Ida dane dumadak rimang:",
"uls-search-help": "Ida dane dados ngerereh anggen adan basa, adan script, kode basa ISO, utawi ida dane dados ngalih anggen wewengkon.",
"uls-search-placeholder": "Basa sane kererehin"
}

View File

@@ -0,0 +1,17 @@
{
"@metadata": {
"authors": [
"Stephensuleeman"
]
},
"uls-region-WW": "Sude luat portibi on",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Eropa",
"uls-region-AS": "Asia",
"uls-region-ME": "Timur Tengah",
"uls-region-PA": "Pasifik",
"uls-no-results-found": "Ndang adong jumpang",
"uls-common-languages": "Hata na somal",
"uls-search-placeholder": "Mandiori hata"
}

21
prototype/i18n/bcc.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Baloch Afghanistan",
"Sultanselim baloch"
]
},
"uls-region-WW": "بی سراسری دونیا",
"uls-region-SP": "ویژه",
"uls-region-AM": "آمریکا",
"uls-region-AF": "آفریقا",
"uls-region-EU": "اروپا",
"uls-region-AS": "آسیا",
"uls-region-ME": "خاورمیانه",
"uls-region-PA": "اقیانوس آرام",
"uls-no-results-found": "نتیجه‌ای یافت نشد",
"uls-common-languages": "زبان‌های رایج",
"uls-no-results-suggestion-title": "ممکن است علاقه‌مند باشید:",
"uls-search-help": "شما می‌توانید بر پایه نام زبان، نام اسکریپت، کد استاندارد زبان یا بر پایه منطقه جستجو کنید:",
"uls-search-placeholder": "زبانء شۏھاز"
}

21
prototype/i18n/bci.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Kjeanclaude"
]
},
"uls-region-WW": "Mein oumouan nou",
"uls-region-SP": "Koungou liké",
"uls-region-AM": "Amériki",
"uls-region-AF": "Afriki",
"uls-region-EU": "Abloki",
"uls-region-AS": "Azi",
"uls-region-ME": "Wia afiliè lô mein i atôliè",
"uls-region-PA": "Pacifiki",
"uls-region-all": "Anien mou bé ngba",
"uls-no-results-found": "Ya woun man liké fi",
"uls-common-languages": "Anien nga bé fa klé mou",
"uls-no-results-suggestion-title": "Amoun kwla klo",
"uls-search-help": "Amoun kwla kounndè i anien douman sou, klèlè douman sou, anien ISO codi sou, anzè amoun kwla kounndè i akpassoua sou.",
"uls-search-placeholder": "Kounndè anien koun"
}

22
prototype/i18n/bcl.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Brazal.dang",
"Geopoet"
]
},
"uls-region-WW": "Pankinaban",
"uls-region-SP": "Espesyal",
"uls-region-AM": "Amerika",
"uls-region-AF": "Aprika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asya",
"uls-region-ME": "Katahawang Sirangan",
"uls-region-PA": "Pasipiko",
"uls-region-all": "Gabos na lengguwahe",
"uls-no-results-found": "Mayong mga resultang nanumpungan",
"uls-common-languages": "Komun na mga lengguwahe",
"uls-no-results-suggestion-title": "Ika gayod interesado sa:",
"uls-search-help": "Ika makakahanap sa pangaran nin lengguwahe, pangaran nin eskrip, ISO kodigo nin lengguwahe o kaya ika makakabuklat sa paagi nin rehiyon.",
"uls-search-placeholder": "Maghanap nin lengguwahe"
}

View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Amire80",
"Red Winged Duck",
"Wizardist"
]
},
"uls-region-WW": "Сусьветныя",
"uls-region-SP": "Дадатковыя",
"uls-region-AM": "Амэрыка",
"uls-region-AF": "Афрыка",
"uls-region-EU": "Эўропа",
"uls-region-AS": "Азія",
"uls-region-ME": "Блізкі Ўсход",
"uls-region-PA": "Акіянія",
"uls-region-all": "Усе мовы",
"uls-no-results-found": "Нічога ня знойдзена",
"uls-common-languages": "Прапанаваныя мовы",
"uls-no-results-suggestion-title": "Магчыма, вас зацікавяць:",
"uls-search-help": "Вы можаце шукаць паводле назвы мовы ці пісьменнасьці, а таксама паводле ISO-коду мовы, або выбраць рэгіён.",
"uls-search-placeholder": "Пошук мовы"
}

22
prototype/i18n/be.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Amire80",
"Unomano"
]
},
"uls-region-WW": "Па ўсім свеце",
"uls-region-SP": "Спецыяльныя",
"uls-region-AM": "Амерыка",
"uls-region-AF": "Афрыка",
"uls-region-EU": "Еўропа",
"uls-region-AS": "Азія",
"uls-region-ME": "Блізкі Ўсход",
"uls-region-PA": "Ціхі акіян",
"uls-region-all": "Усе мовы",
"uls-no-results-found": "Нічога не знойдзена",
"uls-common-languages": "Прапанаваныя мовы",
"uls-no-results-suggestion-title": "Вы можаце быць зацікаўлены ў:",
"uls-search-help": "Вы можаце шукаць па мове, назве сцэнара, ISO-коду мовы, або вы можаце праглядаць па рэгіенах.",
"uls-search-placeholder": "Пошук мовы"
}

25
prototype/i18n/bg.json Normal file
View File

@@ -0,0 +1,25 @@
{
"@metadata": {
"authors": [
"Amire80",
"Aquilax",
"DCLXVI",
"StanProg",
"Vodnokon4e"
]
},
"uls-region-WW": "Световни",
"uls-region-SP": "Специални",
"uls-region-AM": "Америка",
"uls-region-AF": "Африка",
"uls-region-EU": "Европа",
"uls-region-AS": "Азия",
"uls-region-ME": "Близкия изток",
"uls-region-PA": "Тихия океан",
"uls-region-all": "Всички езици",
"uls-no-results-found": "Не бяха открити резултати",
"uls-common-languages": "Предложени езици",
"uls-no-results-suggestion-title": "Може би се интересувате от:",
"uls-search-help": "Можете да търсите по име на език, име на скрипт, ISO кода на език или да разглеждате по региони.",
"uls-search-placeholder": "Търсене на език"
}

22
prototype/i18n/bgn.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Baloch Afghanistan",
"Ibrahim khashrowdi"
]
},
"uls-region-WW": "بی موچین دونیایی تا",
"uls-region-SP": "خاص",
"uls-region-AM": "آمریکا",
"uls-region-AF": "آفریقا",
"uls-region-EU": "اروپا",
"uls-region-AS": "آسیا",
"uls-region-ME": "خاورمیانه",
"uls-region-PA": "اقیانوس آرام",
"uls-region-all": "موچین زبانان",
"uls-no-results-found": "هیچ نتیجه ودئ نبوت",
"uls-common-languages": "پیشنهاد بوته‌این زبانان",
"uls-no-results-suggestion-title": "ممکن اینت علاقه‌مند بئیت:",
"uls-search-help": "شما ئه توانیت به زبانی نامئ اساسا، نامئ اسکریپت، زبانئ استاندارتین کود یا به منطقه‌ای اساسا بگردیت.",
"uls-search-placeholder": "گَشتین په یک زبانئ خاتیرا"
}

26
prototype/i18n/bn.json Normal file
View File

@@ -0,0 +1,26 @@
{
"@metadata": {
"authors": [
"Aftabuzzaman",
"Bellayet",
"Nasir8891",
"Sankarshan",
"Sayak Sarkar",
"আফতাবুজ্জামান"
]
},
"uls-region-WW": "বিশ্বব্যাপী",
"uls-region-SP": "বিশেষ",
"uls-region-AM": "আমেরিকা",
"uls-region-AF": "আফ্রিকা",
"uls-region-EU": "ইউরোপ",
"uls-region-AS": "এশিয়া",
"uls-region-ME": "মধ্যপ্রাচ্য",
"uls-region-PA": "প্রশান্ত মহাসাগরীয়",
"uls-region-all": "সকল ভাষা",
"uls-no-results-found": "কোনো ফলাফল পাওয়া যায়নি",
"uls-common-languages": "প্রস্তাবিত ভাষাসমূহ",
"uls-no-results-suggestion-title": "আপনি হয়তো আগ্রহী হতে পারেন:",
"uls-search-help": "আপনি ভাষার নাম, স্ক্রিপ্টের নাম, ভাষার আইএসও কোড অথবা এলাকার ভিত্তিক অনুসন্ধান করতে পারবেন।",
"uls-search-placeholder": "একটি ভাষার জন্য অনুসন্ধান করুন"
}

22
prototype/i18n/br.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Fulup",
"Gwenn-Ael"
]
},
"uls-region-WW": "Bed a-bezh",
"uls-region-SP": "Dibar",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Azia",
"uls-region-ME": "Reter-Kreiz",
"uls-region-PA": "Habask",
"uls-region-all": "An holl yezhoù",
"uls-no-results-found": "N'eus bet kavet disoc'h ebet",
"uls-common-languages": "Yezhoù aliet",
"uls-no-results-suggestion-title": "Gallout a reot bezañ dedennet gant :",
"uls-search-help": "Gallout a reot klask dre anv yezh, anv skript, kod yezh ISO pe gallout a reot klask dre rannvro.",
"uls-search-placeholder": "Klask ur yezh"
}

24
prototype/i18n/bs.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"DzWiki",
"Edinwiki",
"Srdjan m",
"Srđan"
]
},
"uls-region-WW": "Svjetski",
"uls-region-SP": "Posebno",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Evropa",
"uls-region-AS": "Azija",
"uls-region-ME": "Bliski istok",
"uls-region-PA": "Pacifik",
"uls-region-all": "Svi jezici",
"uls-no-results-found": "Nema pronađenih rezultata",
"uls-common-languages": "Predloženi jezici",
"uls-no-results-suggestion-title": "Možda vas interesuje:",
"uls-search-help": "Možete da tražite po imenu jezika ili pisma, po ISO kodu jezika ili po regionu.",
"uls-search-placeholder": "Pronađi jezik"
}

13
prototype/i18n/bto.json Normal file
View File

@@ -0,0 +1,13 @@
{
"@metadata": {
"authors": [
"Filipinayzd"
]
},
"uls-region-AM": "Amerika",
"uls-region-AF": "Aprika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asya",
"uls-region-PA": "Pasipiko",
"uls-no-results-found": "Uda naturakan na resulta"
}

24
prototype/i18n/ca.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Amire80",
"Pginer",
"Ssola",
"Toniher"
]
},
"uls-region-WW": "Mundial",
"uls-region-SP": "Especials",
"uls-region-AM": "Amèrica",
"uls-region-AF": "Àfrica",
"uls-region-EU": "Europa",
"uls-region-AS": "Àsia",
"uls-region-ME": "Orient mitjà",
"uls-region-PA": "Pacífic",
"uls-region-all": "Totes les llengües",
"uls-no-results-found": "Cap resultat",
"uls-common-languages": "Llengües suggerides",
"uls-no-results-suggestion-title": "Pot interessar-vos:",
"uls-search-help": "Podeu cercar per nom de llengua, nom d'alfabet, codi ISO de la llengua o podeu navegar per regió:",
"uls-search-placeholder": "Cerca una llengua"
}

21
prototype/i18n/ce.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Умар"
]
},
"uls-region-WW": "Дерригдуьненан",
"uls-region-SP": "Леррина",
"uls-region-AM": "Америка",
"uls-region-AF": "Африка",
"uls-region-EU": "Европа",
"uls-region-AS": "Ази",
"uls-region-ME": "Гергара Малхбале",
"uls-region-PA": "Океани",
"uls-region-all": "Берриге меттанаш",
"uls-no-results-found": "Цакарийна",
"uls-common-languages": "Ша дӀанисбелла меттанаш",
"uls-no-results-suggestion-title": "Хьуна хӀара меттанаш хьашта хила мега:",
"uls-search-help": "Хьа таро ю меттан я йозанан цӀарца лаха, меттан ISO-кодаца я регионаца хьажа.",
"uls-search-placeholder": "Лаха мотт"
}

24
prototype/i18n/ckb.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Asoxor",
"Calak",
"Lost Whispers",
"Épine"
]
},
"uls-region-WW": "لە گشت جیھاندا",
"uls-region-SP": "تایبەت",
"uls-region-AM": "ئەمریکا",
"uls-region-AF": "ئەفریقا",
"uls-region-EU": "ئەورووپا",
"uls-region-AS": "ئاسیا",
"uls-region-ME": "ڕۆژھەڵاتی ناوین",
"uls-region-PA": "ئۆقیانووسی ئارام",
"uls-region-all": "ھەموو زمانەکان",
"uls-no-results-found": "ھیچ ئاکامێک نەدۆزرایەوە",
"uls-common-languages": "زمانە پێشنیارکراوەکان",
"uls-no-results-suggestion-title": "ڕەنگە ئەمانەت پێ خۆش بێت:",
"uls-search-help": "دەتوانیت بە پێی ناوی زمان، جۆری ئەلفوبێ، کۆدی ISOی زمان یان بە پێی ناوچە بگەڕێی.",
"uls-search-placeholder": "گەڕان بەدوای زمانێکدا"
}

20
prototype/i18n/cop.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Bloomaround",
"ⲁϩⲙⲉⲧ"
]
},
"uls-region-WW": "ⲡⲓⲑⲟ ⲧⲏⲣϥ",
"uls-region-AM": "ⲁⲙⲉⲣⲓⲕⲏ",
"uls-region-AF": "ⲁⲫⲣⲓⲕⲏ",
"uls-region-EU": "ⲉⲩⲣⲱⲡⲏ",
"uls-region-AS": "ⲁⲥⲓⲁ",
"uls-region-ME": "ⲡⲓⲉⲃⲧ `ⲛⲑⲙⲏϯ",
"uls-region-PA": "ⲱⲕⲉⲁⲛⲓⲁ",
"uls-region-all": "ⲁⲥⲡⲓ ⲛⲓⲃⲉⲛ",
"uls-no-results-found": "ⲁⲩϫⲓⲙⲓ ⲁⲛ ⲛⲓⲁⲡⲟⲧⲉⲗⲉⲥⲙⲁ",
"uls-common-languages": "ⲛⲓⲁⲥⲡⲓ ⲁⲩϯⲙⲉⲩⲓ",
"uls-search-help": "ⲧⲉⲧⲉⲛϫⲉⲙϫⲟⲙ ⲉϫⲉⲙⲣⲁⲧ ϩⲉⲛ ⲡⲓⲣⲁⲛ ⲛⲧⲉ ⲟⲩⲁⲥⲡⲓ, ⲡⲓⲣⲁⲛ ⲛⲧⲉ ⲟⲩⲙⲉⲧⲥϦⲁⲓ, ⲟⲩϣⲓϥⲣ `ⲛISO ⲛⲧⲉ ⲁⲥⲡⲓ ⲓⲉ ⲧⲉⲧⲉⲛϫⲉⲙϫⲟⲙ ⲉⲥⲓⲛⲓ ϧⲁⲧⲉⲛⲟⲩⲭⲱⲣⲁ",
"uls-search-placeholder": "ϫⲉⲙⲣⲁⲧⲕ `ⲛⲟⲩⲁⲥⲡⲓ"
}

23
prototype/i18n/cs.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Amire80",
"Dvorapa",
"Mormegil"
]
},
"uls-region-WW": "Celosvětové",
"uls-region-SP": "Speciální",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Evropa",
"uls-region-AS": "Asie",
"uls-region-ME": "Blízký východ",
"uls-region-PA": "Tichomoří",
"uls-region-all": "Všechny jazyky",
"uls-no-results-found": "Nenalezeny žádné výsledky",
"uls-common-languages": "Doporučené jazyky",
"uls-no-results-suggestion-title": "Mohlo by vás zajímat:",
"uls-search-help": "Můžete vyhledávat podle názvu jazyka, názvu písma, ISO kódu jazyka nebo můžete procházet po regionech.",
"uls-search-placeholder": "Hledat jazyk"
}

22
prototype/i18n/cv.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Chavash",
"Salam"
]
},
"uls-region-WW": "Пӗтӗм тӗнчери",
"uls-region-SP": "Ятарлисем",
"uls-region-AM": "Америка",
"uls-region-AF": "Африка",
"uls-region-EU": "Европа",
"uls-region-AS": "Ази",
"uls-region-ME": "Малти хӗвел тухӑҫ",
"uls-region-PA": "Океани",
"uls-region-all": "Мӗн пур чӗлхе",
"uls-no-results-found": "Нимӗн те тупӑнмарӗ",
"uls-common-languages": "Сӗннӗ чӗлхесем",
"uls-no-results-suggestion-title": "Тен çак чĕлхесем пăхма пултаратăр:",
"uls-search-help": "Чĕлхе ячĕпе, çырулăхĕпе, ISO-кочĕпе е регионĕпе шырама пулать:",
"uls-search-placeholder": "Чĕлхе шыра"
}

22
prototype/i18n/cy.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Dafyddt",
"Lloffiwr",
"Robin Owain"
]
},
"uls-region-WW": "Byd-eang",
"uls-region-SP": "Neilltuol",
"uls-region-AM": "America",
"uls-region-AF": "Affrica",
"uls-region-EU": "Ewrop",
"uls-region-AS": "Asia",
"uls-region-ME": "Y Dwyrain Canol",
"uls-region-PA": "Y Pasiffig",
"uls-no-results-found": "Ni chafwyd unrhyw ganlyniadau",
"uls-common-languages": "Ieithoedd awgrymedig",
"uls-no-results-suggestion-title": "Hwyrach bod y rhai sy'n dilyn o ddiddordeb i chi:",
"uls-search-help": "Gallwch chwilio gan ddefnyddio enw iaith, enw sgript, côd ISO'r iaith neu gallwch bori fesul rhanbarth.",
"uls-search-placeholder": "Chwilio am iaith"
}

24
prototype/i18n/da.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Amire80",
"Christian List",
"Jubber",
"Peter Alberti"
]
},
"uls-region-WW": "Verdensomspændende",
"uls-region-SP": "Specielle",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asien",
"uls-region-ME": "Mellemøsten",
"uls-region-PA": "Stillehavet",
"uls-region-all": "Alle sprog",
"uls-no-results-found": "Ingen resultater fundet",
"uls-common-languages": "Foreslåede sprog",
"uls-no-results-suggestion-title": "Du er måske interesseret i:",
"uls-search-help": "Du kan søge på sprogets navn, skriftens navn eller sprogets ISO-kode, eller du kan bladre hen til sproget efter regionen.",
"uls-search-placeholder": "Søg efter et sprog"
}

View File

@@ -0,0 +1,12 @@
{
"@metadata": {
"authors": [
"Kghbln",
"Purodha"
]
},
"uls-region-SP": "Extras - kein Schprohche",
"uls-no-results-suggestion-title": "Dies könnte Sie interessieren:",
"uls-search-help": "Sie können nach dem Namen der Sprache suchen, dem Namen der Schrift, dem ISO-Code der Sprache oder aber die Suche über eine Region durchführen:",
"uls-search-placeholder": "Noh Schprohche söhke"
}

24
prototype/i18n/de.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Kghbln",
"Man77",
"Metalhead64",
"TMg"
]
},
"uls-region-WW": "Weltweit",
"uls-region-SP": "Spezial",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asien",
"uls-region-ME": "Naher Osten",
"uls-region-PA": "Pazifik",
"uls-region-all": "Alle Sprachen",
"uls-no-results-found": "Es wurden keine Ergebnisse gefunden.",
"uls-common-languages": "Vorgeschlagene Sprachen",
"uls-no-results-suggestion-title": "Dies könnte dich interessieren:",
"uls-search-help": "Du kannst nach dem Namen der Sprache suchen, dem Namen der Schrift, dem ISO-Code der Sprache oder aber die Suche über eine Region durchführen.",
"uls-search-placeholder": "Nach einer Sprache suchen"
}

27
prototype/i18n/diq.json Normal file
View File

@@ -0,0 +1,27 @@
{
"@metadata": {
"authors": [
"Asmen",
"Erdemaslancan",
"Gorizon",
"Gırd",
"Kumkumuk",
"Marmase",
"Mirzali"
]
},
"uls-region-WW": "Dınyayi",
"uls-region-SP": "Xısusi",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Ewropa",
"uls-region-AS": "Asya",
"uls-region-ME": "Rocvetışê Miyani",
"uls-region-PA": "Pasifik",
"uls-region-all": "Zıwani pêro",
"uls-no-results-found": "Neticeyi nêvêniyayi",
"uls-common-languages": "Zıwanê ke estê.",
"uls-no-results-suggestion-title": "Belki şıma cıya eleqederi:",
"uls-search-help": ıma şenê name dê zıwaniya, skript kodiya, ISO qodiya yana mıntıqa heta cıgeyrayış bıkerê.",
"uls-search-placeholder": "Yew zıwani cı geyre"
}

20
prototype/i18n/dsb.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Michawiki"
]
},
"uls-region-WW": "na cełem swěśe",
"uls-region-SP": "Specialne",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Azija",
"uls-region-ME": "Srjejźne pódzajtšo",
"uls-region-PA": "Pacifik",
"uls-no-results-found": "Žedne wuslědki namakane",
"uls-common-languages": "Powšykne rěcy",
"uls-no-results-suggestion-title": "To by mógło śi zajmowaś:",
"uls-search-help": "Móžoš pó mjenju rěcy, mjenju pisma, ISO-koźe rěcy pytaś abo móžoš pó regionje pytaś:",
"uls-search-placeholder": "Rěcne pytanje"
}

22
prototype/i18n/dty.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Nirajan pant",
"रमेश सिंह बोहरा"
]
},
"uls-region-WW": "विश्वभर",
"uls-region-SP": "खास",
"uls-region-AM": "अमेरिका",
"uls-region-AF": "अफ्रिका",
"uls-region-EU": "युरोप",
"uls-region-AS": "एसिया",
"uls-region-ME": "मध्य पूर्व",
"uls-region-PA": "प्रशान्त",
"uls-region-all": "जम्माइ भाषान",
"uls-no-results-found": "कोइ पन नतिजाहरू नाइभेटिया",
"uls-common-languages": "सुझावित भाषाअन",
"uls-no-results-suggestion-title": "तमलाई यैमी मन लाग्गसकन्छ:",
"uls-search-help": "तम भषा: नाउँले, लिपिया नाउँले, भषा: ISO कोड खोजिसकन्छ: या क्षेत्रा आधारमी ब्राउज अरिसकन्छ:।",
"uls-search-placeholder": "भाषा खिलाइ खोजी अरऽ"
}

21
prototype/i18n/ee.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Aguve"
]
},
"uls-region-WW": "Xexeme Godoo",
"uls-region-SP": "Tɔxɛ",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asia",
"uls-region-ME": "Titina Ɣedzeƒe",
"uls-region-PA": "Pasifik",
"uls-region-all": "Gbewo Katã",
"uls-no-results-found": "Mekpɔ naneke o",
"uls-common-languages": "Kpɔ gbe siawo ɖa",
"uls-no-results-suggestion-title": "Ɖewohĩ esiwo gbɔna adzɔ dzi na wò:",
"uls-search-help": "Àte ŋu aŋlɔ gbea ŋkɔ atsɔ adii, azã woƒe skript ƒe ŋkɔ, gbea ƒe ISO dzesi adii alo àdii le nutonutowo nu.",
"uls-search-placeholder": "Di gbe aɖe"
}

23
prototype/i18n/el.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Amire80",
"Evropi",
"Geraki"
]
},
"uls-region-WW": "Παγκόσμιες",
"uls-region-SP": "Ειδικές",
"uls-region-AM": "Αμερική",
"uls-region-AF": "Αφρική",
"uls-region-EU": "Ευρώπη",
"uls-region-AS": "Ασία",
"uls-region-ME": "Μέση Ανατολή",
"uls-region-PA": "Ειρηνικός",
"uls-region-all": "Όλες οι γλώσσες",
"uls-no-results-found": "Δε βρέθηκαν αποτελέσματα",
"uls-common-languages": "Προτεινόμενες γλώσσες",
"uls-no-results-suggestion-title": "Μπορεί να σας ενδιαφέρουν:",
"uls-search-help": "Μπορείτε να ψάξετε κατά το όνομα της γλώσσας, τρόπο γραφής, κωδικό ISO της γλώσσας, ή να περιηγηθείτε ανά περιοχή.",
"uls-search-placeholder": "Αναζήτηση για γλώσσα"
}

22
prototype/i18n/en-gb.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Andibing",
"Chase me ladies, I'm the Cavalry"
]
},
"uls-region-WW": "Worldwide",
"uls-region-SP": "Special",
"uls-region-AM": "America",
"uls-region-AF": "Africa",
"uls-region-EU": "Europe",
"uls-region-AS": "Asia",
"uls-region-ME": "Middle East",
"uls-region-PA": "Pacific",
"uls-region-all": "All languages",
"uls-no-results-found": "No results found",
"uls-common-languages": "Suggested languages",
"uls-no-results-suggestion-title": "You may be interested in:",
"uls-search-help": "You can search by language name, script name, ISO code of language or you can browse by region.",
"uls-search-placeholder": "Search for a language"
}

22
prototype/i18n/en.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"author": "Santhosh Thottingal <santhosh.thottingal@gmail.com>",
"last-updated": "2012-09-21",
"locale": "en",
"message-documentation": "qqq"
},
"uls-region-WW": "Worldwide",
"uls-region-SP": "Special",
"uls-region-AM": "America",
"uls-region-AF": "Africa",
"uls-region-EU": "Europe",
"uls-region-AS": "Asia",
"uls-region-ME": "Middle East",
"uls-region-PA": "Pacific",
"uls-region-all": "All languages",
"uls-no-results-found": "No results found",
"uls-common-languages": "Suggested languages",
"uls-no-results-suggestion-title": "You may be interested in:",
"uls-search-help": "You can search by language name, script name, ISO code of language or you can browse by region.",
"uls-search-placeholder": "Search for a language"
}

24
prototype/i18n/eo.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Amire80",
"KuboF",
"Objectivesea",
"Orikrin1998"
]
},
"uls-region-WW": "Tutmonda",
"uls-region-SP": "Speciala",
"uls-region-AM": "Ameriko",
"uls-region-AF": "Afriko",
"uls-region-EU": "Eŭropo",
"uls-region-AS": "Azio",
"uls-region-ME": "Mezoriento",
"uls-region-PA": "Pacifiko",
"uls-region-all": "Ĉiuj lingvoj",
"uls-no-results-found": "Neniu rezulto estis trovita",
"uls-common-languages": "Sugestataj lingvoj",
"uls-no-results-suggestion-title": "Vi eble interesiĝas pri:",
"uls-search-help": "Vi povas serĉi laŭ la lingvonomo, la skriptnomo aŭ la lingva ISO-kodo, aŭ vi povas foliumi laŭ regiono.",
"uls-search-placeholder": "Serĉi lingvon"
}

27
prototype/i18n/es.json Normal file
View File

@@ -0,0 +1,27 @@
{
"@metadata": {
"authors": [
"Armando-Martin",
"Fitoschido",
"Macofe",
"McDutchie",
"Pginer",
"Santhosh.thottingal",
"Vivaelcelta"
]
},
"uls-region-WW": "Mundial",
"uls-region-SP": "Especial",
"uls-region-AM": "América",
"uls-region-AF": "África",
"uls-region-EU": "Europa",
"uls-region-AS": "Asia",
"uls-region-ME": "Medio Oriente",
"uls-region-PA": "Pacífico",
"uls-region-all": "Todos los idiomas",
"uls-no-results-found": "No se encontraron resultados",
"uls-common-languages": "Idiomas sugeridos",
"uls-no-results-suggestion-title": "Puedes estar interesado en:",
"uls-search-help": "Puedes buscar por el nombre del idioma, su tipo de escritura, el código ISO del idioma o buscar por región.",
"uls-search-placeholder": "Buscar un idioma"
}

21
prototype/i18n/et.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Pikne"
]
},
"uls-region-WW": "Kogu maailm",
"uls-region-SP": "Erijuhud",
"uls-region-AM": "Ameerika",
"uls-region-AF": "Aafrika",
"uls-region-EU": "Euroopa",
"uls-region-AS": "Aasia",
"uls-region-ME": "Lähis-Ida",
"uls-region-PA": "Vaikne ookean",
"uls-region-all": "Kõik keeled",
"uls-no-results-found": "Tulemusi ei leitud.",
"uls-common-languages": "Soovitatavad keeled",
"uls-no-results-suggestion-title": "Võid eelistada neid:",
"uls-search-help": "Saad otsida keeli keelenimetuse, kirjanimetuse või keele ISO-koodi järgi või sirvida keeli piirkonna järgi.",
"uls-search-placeholder": "Keeleotsing"
}

23
prototype/i18n/eu.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"An13sa",
"Sator",
"Theklan"
]
},
"uls-region-WW": "Mundu osoa",
"uls-region-SP": "Berezia",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asia",
"uls-region-ME": "Ekialde Hurbila",
"uls-region-PA": "Pazifikoa",
"uls-region-all": "Hizkuntza guztiak",
"uls-no-results-found": "Ez da emaitzarik aurkitu",
"uls-common-languages": "Proposatutako hizkuntzak",
"uls-no-results-suggestion-title": "Agian interesa duzu:",
"uls-search-help": "Bilaketa egin ahal duzu hizkuntzaren izena, script izena, hizkuntzaren ISO kodea edo eskualdeka bilaketa egin ahal duzu.",
"uls-search-placeholder": "Hizkuntza bat bilatu"
}

25
prototype/i18n/fa.json Normal file
View File

@@ -0,0 +1,25 @@
{
"@metadata": {
"authors": [
"Ahmad252",
"Alirezaaa",
"Amire80",
"Namo",
"Reza1615"
]
},
"uls-region-WW": "در سراسر جهان",
"uls-region-SP": "ویژه",
"uls-region-AM": "آمریکا",
"uls-region-AF": "آفریقا",
"uls-region-EU": "اروپا",
"uls-region-AS": "آسیا",
"uls-region-ME": "خاورمیانه",
"uls-region-PA": "اقیانوس آرام",
"uls-region-all": "همهٔ زبان‌ها",
"uls-no-results-found": "نتیجه‌ای یافت نشد",
"uls-common-languages": "زبان‌های پیشنهادشده",
"uls-no-results-suggestion-title": "ممکن است علاقه‌مند باشید:",
"uls-search-help": "شما می‌توانید بر پایه نام زبان، نام اسکریپت، کد استاندارد زبان یا بر پایه منطقه جستجو کنید.",
"uls-search-placeholder": "جستجوی زبان"
}

24
prototype/i18n/fi.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Alluk.",
"Nedergard",
"Nike",
"VezonThunder"
]
},
"uls-region-WW": "Maailmankielet",
"uls-region-SP": "Erikoiskielet",
"uls-region-AM": "Pohjois- ja Etelä-Amerikka",
"uls-region-AF": "Afrikka",
"uls-region-EU": "Eurooppa",
"uls-region-AS": "Aasia",
"uls-region-ME": "Lähi-itä",
"uls-region-PA": "Tyynenmeren alue",
"uls-region-all": "Kaikki kielet",
"uls-no-results-found": "Ei hakutuloksia",
"uls-common-languages": "Ehdotetut kielet",
"uls-no-results-suggestion-title": "Lähimmät hakutulokset:",
"uls-search-help": "Hae kielen tai kirjoitusjärjestelmän nimellä, kielen ISO-koodilla tai selaa kieliä alueluettelosta:",
"uls-search-placeholder": "Etsi kieltä"
}

21
prototype/i18n/fit.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"Pyscowicz"
]
},
"uls-region-WW": "Maailmankielet",
"uls-region-SP": "Spesiaalikielet",
"uls-region-AM": "Pohjois- ja Etelä-Ameriika",
"uls-region-AF": "Aafriikka",
"uls-region-EU": "Euruuppa",
"uls-region-AS": "Aasia",
"uls-region-ME": "Lähi-itä",
"uls-region-PA": "Tyynenmeren alue",
"uls-region-all": "Kaikki kielet",
"uls-no-results-found": "Ei hakuresyltaatteja",
"uls-common-languages": "Ehotetut kielet",
"uls-no-results-suggestion-title": "Lähimmät hakuresyltaatit:",
"uls-search-help": "Hae kielen tai kirjoitussysteemin nimelä, kielen ISO-kootila eli selaa kieliä aluelistasta:",
"uls-search-placeholder": "Eti kieltä"
}

20
prototype/i18n/fo.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"EileenSanda"
]
},
"uls-region-WW": "Alheims",
"uls-region-SP": "Serstakt",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Evropa",
"uls-region-AS": "Asia",
"uls-region-ME": "Miðeystur",
"uls-region-PA": "Stillahavið",
"uls-no-results-found": "Ongi úrslit funnin",
"uls-common-languages": "Vanlig mál",
"uls-no-results-suggestion-title": "Tú ert kanska áhugað/ur í:",
"uls-search-help": "Tú kanst leita eftir navni á máli, skrifttýpu á máli, ISO kotu av máli ella kanst tú leita eftir øki:",
"uls-search-placeholder": "Leita eftir máli"
}

25
prototype/i18n/fr.json Normal file
View File

@@ -0,0 +1,25 @@
{
"@metadata": {
"authors": [
"Gomoko",
"Pols12",
"Ultimate",
"Verdy p",
"Wladek92"
]
},
"uls-region-WW": "Dans le monde entier",
"uls-region-SP": "Spéciales",
"uls-region-AM": "Amérique",
"uls-region-AF": "Afrique",
"uls-region-EU": "Europe",
"uls-region-AS": "Asie",
"uls-region-ME": "Moyen-Orient",
"uls-region-PA": "Pacifique",
"uls-region-all": "Toutes les langues",
"uls-no-results-found": "Aucun résultat trouvé",
"uls-common-languages": "Langues suggérées",
"uls-no-results-suggestion-title": "Vous pouvez être intéressé par:",
"uls-search-help": "Vous pouvez rechercher par nom de langue, par nom de lécriture, par code ISO de langue, ou vous pouvez naviguer par région.",
"uls-search-placeholder": "Rechercher une langue"
}

20
prototype/i18n/fur.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Klenje"
]
},
"uls-region-WW": "Dut il mont",
"uls-region-SP": "Speciâl",
"uls-region-AM": "Americhe",
"uls-region-AF": "Afriche",
"uls-region-EU": "Europe",
"uls-region-AS": "Asie",
"uls-region-ME": "Medi Orient",
"uls-region-PA": "Pacjific",
"uls-no-results-found": "Nissun risultât",
"uls-common-languages": "Lenghis comunis",
"uls-no-results-suggestion-title": "Tu puedis jessi interessât a:",
"uls-search-help": "Tu pues cirî par non de lenghe, non dal alfabet, codis ISO de lenghe o tu puedis cirî intune regjon:",
"uls-search-placeholder": "Ricercje de lenghe"
}

23
prototype/i18n/fy.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"PiefPafPier",
"Robin van der Vliet",
"Robin0van0der0vliet"
]
},
"uls-region-WW": "Wrâldwiid",
"uls-region-SP": "Spesjaal",
"uls-region-AM": "Amearika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Jeropa",
"uls-region-AS": "Aazje",
"uls-region-ME": "Midden-Easten",
"uls-region-PA": "Pasifysk gebiet",
"uls-region-all": "Alle talen",
"uls-no-results-found": "Gjin resultaten fûn",
"uls-common-languages": "Taalsuggestjes",
"uls-no-results-suggestion-title": "Faaks stelle jo belang yn:",
"uls-search-help": "Jo kinne op taalnamme, skriftnamme, ISO-koade fan 'e taal sykje of it op gebiet trochsjen.",
"uls-search-placeholder": "Taal sykje"
}

20
prototype/i18n/ga.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Kscanne"
]
},
"uls-region-WW": "Ar fud an Domhain",
"uls-region-SP": "Speisialta",
"uls-region-AM": "Meiriceá",
"uls-region-AF": "An Afraic",
"uls-region-EU": "An Eoraip",
"uls-region-AS": "An Áise",
"uls-region-ME": "An Meánoirthear",
"uls-region-PA": "An tAigéan Ciúin",
"uls-no-results-found": "Gan torthaí",
"uls-common-languages": "Teangacha coitianta",
"uls-no-results-suggestion-title": "Seans go mbeadh suim agat i:",
"uls-search-help": "Is féidir cuardach de réir ainm na teanga, ainm na scripte, cód ISO 639, nó brabhsáil de réir réigiúin:",
"uls-search-placeholder": "Cuardaigh teangacha"
}

21
prototype/i18n/gcr.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"LeGuyanaisPure"
]
},
"uls-region-WW": "Annan monn antché",
"uls-region-SP": "Èspésyal",
"uls-region-AM": "Lanmérik",
"uls-region-AF": "Lafrik",
"uls-region-EU": "Léròp",
"uls-region-AS": "Lazi",
"uls-region-ME": "Mwayen-Loryan",
"uls-region-PA": "Pasifik",
"uls-region-all": "Tout lanng-yan",
"uls-no-results-found": "Pyès rézilta trouvé",
"uls-common-languages": "Lanng sigjéré",
"uls-no-results-suggestion-title": "Ou pouvé fika entérésé pa :",
"uls-search-help": "Ou pouvé sasé pa non di lanng, pa non di lékritir-a, pa kod ISO di lanng-an, oben ou pouvé navigé pa réjyon.",
"uls-search-placeholder": "Sasé roun lanng"
}

22
prototype/i18n/gd.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Akerbeltz",
"GunChleoc"
]
},
"uls-region-WW": "Mòr-chànan",
"uls-region-SP": "Sònraichte",
"uls-region-AM": "Aimeireaga",
"uls-region-AF": "Afraga",
"uls-region-EU": "An Roinn-Eòrpa",
"uls-region-AS": "Àisia",
"uls-region-ME": "An Ear-mheadhan",
"uls-region-PA": "An Cuan Sèimh",
"uls-region-all": "A h-uile cànan",
"uls-no-results-found": "Cha deach toradh a lorg",
"uls-common-languages": "Cànain a mholamaid",
"uls-no-results-suggestion-title": "S dòcha gum bi ùidh agad sna leanas:",
"uls-search-help": "'S urrainn dhut lorg le ainm a' chànain, ainm an sgriobt, còd ISO a' chànain no brabhsadh a-rèir roinn-dùthcha.",
"uls-search-placeholder": "Lorg cànan"
}

23
prototype/i18n/gl.json Normal file
View File

@@ -0,0 +1,23 @@
{
"@metadata": {
"authors": [
"Banjo",
"Elisardojm",
"Toliño"
]
},
"uls-region-WW": "Mundial",
"uls-region-SP": "Especial",
"uls-region-AM": "América",
"uls-region-AF": "África",
"uls-region-EU": "Europa",
"uls-region-AS": "Asia",
"uls-region-ME": "Oriente Medio",
"uls-region-PA": "Pacífico",
"uls-region-all": "Todas as linguas",
"uls-no-results-found": "Non se atopou ningún resultado",
"uls-common-languages": "Linguas suxeridas",
"uls-no-results-suggestion-title": "Poida que estea buscando:",
"uls-search-help": "Pode procurar polo nome da lingua, o tipo de escritura ou o código ISO. Tamén pode explorar as rexións.",
"uls-search-placeholder": "Procurar unha lingua"
}

21
prototype/i18n/glk.json Normal file
View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"شیخ"
]
},
"uls-region-WW": "دۊنىا سرتاسرˇ ميئن",
"uls-region-SP": "خاص",
"uls-region-AM": "آمريکا",
"uls-region-AF": "آفريقا",
"uls-region-EU": "اۊرۊپا",
"uls-region-AS": "آسيا",
"uls-region-ME": "مئني خۊرتؤ",
"uls-region-PA": "اۊقيانۊسˇ آرؤم",
"uls-region-all": "همته زوؤنؤن",
"uls-no-results-found": "نتيجه-اي وامته نۊبؤ",
"uls-common-languages": "پيش بنا زوؤنؤن",
"uls-no-results-suggestion-title": "مۊمکنه خۊش بدأرين:",
"uls-search-help": "شۊمۊ تؤنين زوانˇ نؤمˇ أمرأ، رسم الخط، زوانˇ ايزؤ کؤد ىا شيمي سامؤنˇ أمرأ وامجين.",
"uls-search-placeholder": "وامج يته زوؤنˇ ويسين"
}

22
prototype/i18n/gn.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Fitoschido",
"P. S. F. Freitas"
]
},
"uls-region-WW": "Yvóra",
"uls-region-SP": "Mba'echĩchĩ",
"uls-region-AM": "Amérika",
"uls-region-AF": "Áfrika",
"uls-region-EU": "Európa",
"uls-region-AS": "Ásia",
"uls-region-ME": "Mbyte Kuarahyresẽ",
"uls-region-PA": "Paraguasu Py'aguapy",
"uls-region-all": "Opa ñe'ẽ",
"uls-no-results-found": "Ndojuhu mba'e",
"uls-common-languages": "Ñe'ẽ ojeipuruvéva",
"uls-no-results-suggestion-title": "Nde ikatu reipotaː",
"uls-search-help": "Nde ikatu reheka ñe'ẽ héra rupi, tai ysaja rupi, ISO ñe'ẽ héra térã ñe'ẽ renda rupi.",
"uls-search-placeholder": "Ñe'ẽ jeheka"
}

View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Santhosh.thottingal",
"The Discoverer",
"Vaishali Parab"
]
},
"uls-region-AM": "अमेरिका",
"uls-region-AF": "अफ़्रीका",
"uls-region-EU": "यूरोप",
"uls-region-AS": "एशिया",
"uls-region-ME": "मदलें उदेंत",
"uls-region-PA": "पॅसिफीक",
"uls-no-results-found": "परिणाम मेळूंक ना",
"uls-common-languages": "सामान्य भासो",
"uls-no-results-suggestion-title": "Tuka avdot:",
"uls-search-help": "तुज्यान भाशेचें नांव, लिपीचें नांव, भाशेचो ISO कोड वा जाग्यावरवीं सोदूंक जाता.",
"uls-search-placeholder": "भास सोदात"
}

View File

@@ -0,0 +1,21 @@
{
"@metadata": {
"authors": [
"The Discoverer"
]
},
"uls-region-WW": "Akhea sonvsarant",
"uls-region-SP": "Khashelem",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Erop",
"uls-region-AS": "Asia",
"uls-region-ME": "Modlem Udent",
"uls-region-PA": "Pacifik",
"uls-region-all": "Soglleo bhaso",
"uls-no-results-found": "Porinam mellunk nam",
"uls-common-languages": "Suchoiloeo bhaso",
"uls-no-results-suggestion-title": "Tuka avdot:",
"uls-search-help": "Tujean bhase, lipie, bhaseche ISO code vo zagea vorvim sodunk zata.",
"uls-search-placeholder": "Eke bhase khatir sod"
}

20
prototype/i18n/got.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Gothicspeaker"
]
},
"uls-region-WW": "𐌹𐌽 𐌰𐌻𐌻𐌰𐌼𐌰 𐍆𐌰𐌹𐍂𐍈𐌰𐌿",
"uls-region-SP": "𐍃𐌹𐌻𐌳𐌰𐌻𐌴𐌹𐌺𐍃",
"uls-region-AM": "𐌰𐌼𐌴𐍂𐌹𐌺𐌰",
"uls-region-AF": "𐌰𐍆𐍂𐌹𐌺𐌰",
"uls-region-EU": "𐌰𐌹𐍅𐍂𐍉𐍀𐌰",
"uls-region-AS": "𐌰𐍃𐌹𐌰",
"uls-region-ME": "𐌼𐌹𐌳𐌾𐌹𐍃 𐌰𐌿𐍃𐍄𐍂𐌰",
"uls-region-PA": "𐍀𐌰𐍃𐌹𐍆𐌹𐌺",
"uls-no-results-found": "𐌽𐌹 𐍅𐌰𐌹𐌷𐍄𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐍃",
"uls-common-languages": "𐌱𐌹𐌿𐌷𐍄𐌰 𐍂𐌰𐌶𐌳𐍉𐍃",
"uls-no-results-suggestion-title": "𐌿𐍆𐍄𐍉 𐍅𐌹𐌻𐌴𐌹𐍃 𐍃𐌿𐌼𐍃 𐌸𐌹𐌶𐍉 𐍂𐌰𐌶𐌳𐍉:",
"uls-search-help": "𐌼𐌰𐌲𐍄 𐍃𐍉𐌺𐌾𐌰𐌽 𐌼𐌹𐌸 𐍂𐌰𐌶𐌳𐌰𐌽𐌰𐌼𐌹𐌽, 𐌼𐌴𐌻𐌴𐌹𐌽𐌹𐌽𐌰𐌼𐌹𐌽, 𐌹𐍃𐍉 𐍂𐌰𐌸𐌾𐍉𐌽 𐌸𐌹𐌶𐍉𐍃 𐍂𐌰𐌶𐌳𐍉𐍃 𐌰𐌹𐌸𐌸𐌰𐌿 𐌼𐌰𐌲𐍄 𐍃𐍉𐌺𐌾𐌰𐌽 𐌱𐌹 𐌲𐌰𐍅𐌹.",
"uls-search-placeholder": "𐍂𐌰𐌶𐌳𐌰 𐍃𐍉𐌺𐌴𐌹𐌽𐍃"
}

18
prototype/i18n/grc.json Normal file
View File

@@ -0,0 +1,18 @@
{
"@metadata": {
"authors": [
"PastelKos"
]
},
"uls-region-WW": "Οἰκουμενικῶς",
"uls-region-AM": "Ἀμερική",
"uls-region-AF": "Λιβύη",
"uls-region-EU": "Εὐρώπη",
"uls-region-AS": "Ἀσία",
"uls-region-ME": "Ἐγγὺς Ἀνατολή",
"uls-region-PA": "Εἰρηνικός",
"uls-region-all": "Ἅπασαι αἱ γλῶσσαι",
"uls-no-results-found": "Οὐδὲν Ἀποτέλεσμα",
"uls-common-languages": "Εἰσηγούμεναι γλῶσσαι",
"uls-search-placeholder": "Ζητεῖν γλῶσσαν"
}

22
prototype/i18n/gsw.json Normal file
View File

@@ -0,0 +1,22 @@
{
"@metadata": {
"authors": [
"Als-Holder",
"Terfili"
]
},
"uls-region-WW": "Wältwyt",
"uls-region-SP": "Spezial",
"uls-region-AM": "Amerika",
"uls-region-AF": "Afrika",
"uls-region-EU": "Europa",
"uls-region-AS": "Asie",
"uls-region-ME": "Mittlere Oschte",
"uls-region-PA": "Pazifik",
"uls-region-all": "Alli Sprooche",
"uls-no-results-found": "Kei Ergebnis gfunde",
"uls-common-languages": "Sprooche, wo vorgschlo sin",
"uls-no-results-suggestion-title": "Des chennt Di interessiere:",
"uls-search-help": "Du chasch noch em Name vu dr Sproch sueche, em ISO-Code vu dr Sproch oder Du gohsch iber e Region fir d Suechi.",
"uls-search-placeholder": "Nooch ere Sproch sueche"
}

24
prototype/i18n/gu.json Normal file
View File

@@ -0,0 +1,24 @@
{
"@metadata": {
"authors": [
"Ashok modhvadia",
"Harsh4101991",
"KartikMistry",
"Santhosh.thottingal"
]
},
"uls-region-WW": "વિશ્વભરમાં",
"uls-region-SP": "ખાસ",
"uls-region-AM": "અમેરિકા",
"uls-region-AF": "આફ્રિકા",
"uls-region-EU": "યુરોપ",
"uls-region-AS": "એશિયા",
"uls-region-ME": "મધ્ય પૂર્વ",
"uls-region-PA": "પૅસિફિક",
"uls-region-all": "બધી ભાષાઓ",
"uls-no-results-found": "કોઈ પરિણામ મળ્યા નહી",
"uls-common-languages": "સૂચિત ભાષાઓ",
"uls-no-results-suggestion-title": "તમને આમાં રસ હોઈ શકે છે:",
"uls-search-help": "તમે ભાષા નામ, સ્ક્રિપ્ટ નામ, ભાષા ISO કોડ દ્વારા શોધ કરી શકો છે અથવા તમે પ્રદેશ દ્વારા શોધ કરી શકો છો.",
"uls-search-placeholder": "ભાષા માટે શોધો"
}

20
prototype/i18n/hak.json Normal file
View File

@@ -0,0 +1,20 @@
{
"@metadata": {
"authors": [
"Jetlag"
]
},
"uls-region-WW": "全世界",
"uls-region-SP": "特別",
"uls-region-AM": "美洲",
"uls-region-AF": "非洲",
"uls-region-EU": "歐洲",
"uls-region-AS": "亞洲",
"uls-region-ME": "中東",
"uls-region-PA": "太平洋",
"uls-no-results-found": "尋毋到任何結果",
"uls-common-languages": "常用語言",
"uls-no-results-suggestion-title": "爾可能感興趣:",
"uls-search-help": "爾可以按語言名稱、程式碼名稱、語言ISO代碼搜索也可以按區域瀏覽",
"uls-search-placeholder": "語言搜索"
}

Some files were not shown because too many files have changed in this diff Show More