*/
function generateLocation($referer, $host, $loopTerms = array())
{
- $finalReferer = '?';
+ $finalReferer = './?';
// No referer if it contains any value in $loopCriteria.
foreach (array_filter($loopTerms) as $value) {
### Contributing
-We encourage the community to contribute to Shaarli's translation either by improving existing
-translations or submitting a new language.
+We encourage the community to contribute to Shaarli's translation either by improving existing
+translations or submitting a new language.
Contributing to the translation does not require development skill.
Poedit will extract strings to translate from the PHP source code.
-**Important**: due to the usage of a template engine, it's important to generate PHP cache files to extract
-every translatable string.
+**Important**: due to the usage of a template engine, it's important to generate PHP cache files to extract
+every translatable string.
You can either use [this script](https://gist.github.com/ArthurHoaro/5d0323f758ab2401ef444a53f54e9a07) (recommended)
or visit every template page in your browser to generate cache files, while logged in.
http://<replace_domain>/?post
http://<replace_domain>/?do=export
http://<replace_domain>/?do=import
-http://<replace_domain>/?do=login
+http://<replace_domain>/login
http://<replace_domain>/?do=picwall
http://<replace_domain>/?do=pluginadmin
http://<replace_domain>/?do=tagcloud
#### Improve existing translation
-In Poedit, click on "Edit a Translation", and from Shaarli's directory open
-`inc/languages/<lang>/LC_MESSAGES/shaarli.po`.
+In Poedit, click on "Edit a Translation", and from Shaarli's directory open
+`inc/languages/<lang>/LC_MESSAGES/shaarli.po`.
The existing list of translatable strings should have been loaded, then click on the "Update" button.
#### Add a new language
-Open Poedit and select "Create New Translation", then from Shaarli's directory open
+Open Poedit and select "Create New Translation", then from Shaarli's directory open
`inc/languages/<lang>/LC_MESSAGES/shaarli.po`.
-Then select the language you want to create.
+Then select the language you want to create.
-Click on `File > Save as...`, and save your file in `<shaarli directory>/inc/language/<new language>/LC_MESSAGES/shaarli.po`.
-`<new language>` here should be the language code respecting the [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-2)
+Click on `File > Save as...`, and save your file in `<shaarli directory>/inc/language/<new language>/LC_MESSAGES/shaarli.po`.
+`<new language>` here should be the language code respecting the [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-2)
format in lowercase (e.g. `de` for German).
Then click on the "Update" button, and you can start to translate every available string.
Save when you're done, then you can submit a pull request containing the new `shaarli.po`.
-### Theme translations
+### Theme translations
Theme translation extensions are loaded automatically if they're present.
tpl/<theme name>/language/<lang>/LC_MESSAGES/<theme name>.po
tpl/<theme name>/language/<lang>/LC_MESSAGES/<theme name>.mo
-Where `<lang>` is the ISO 3166-1 alpha-2 language code.
+Where `<lang>` is the ISO 3166-1 alpha-2 language code.
Read the following section "Extend Shaarli's translation" to learn how to generate those files.
### Extend Shaarli's translation
Your `.po` files must be named like your domain. E.g. if your translation domain is `my_theme`, then your file will be
`my_theme.po`.
-Users have to register your extension in their configuration with the parameter
+Users have to register your extension in their configuration with the parameter
`translation.extensions.<domain>: <translation files path>`.
Example:
1. `File > New`
2. Choose your language
3. Save your `PO` file in `<your_module>/languages/<language code>/LC_MESSAGES/my_theme.po`.
- 4. Go to `Catalog > Properties...`
+ 4. Go to `Catalog > Properties...`
5. Fill the `Translation Properties` tab
6. Add your source path in the `Sources Paths` tab
7. In the `Sources Keywords` tab uncheck "Also use default keywords" and add the following lines:
-
+
```
my_theme_t
my_theme_t:1,2
// Optional redirect after login:
if (isset($_GET['post'])) {
- $uri = '?post='. urlencode($_GET['post']);
+ $uri = './?post='. urlencode($_GET['post']);
foreach (array('description', 'source', 'title', 'tags') as $param) {
if (!empty($_GET[$param])) {
$uri .= '&'.$param.'='.urlencode($_GET[$param]);
}
if (isset($_GET['edit_link'])) {
- header('Location: ?edit_link='. escape($_GET['edit_link']));
+ header('Location: ./?edit_link='. escape($_GET['edit_link']));
exit;
}
if (isset($_POST['returnurl'])) {
// Prevent loops over login screen.
- if (strpos($_POST['returnurl'], 'do=login') === false) {
+ if (strpos($_POST['returnurl'], '/login') === false) {
header('Location: '. generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST']));
exit;
}
}
- header('Location: ?');
+ header('Location: ./?');
exit;
} else {
$loginManager->handleFailedLogin($_SERVER);
- $redir = '&username='. urlencode($_POST['login']);
+ $redir = '?username='. urlencode($_POST['login']);
if (isset($_GET['post'])) {
$redir .= '&post=' . urlencode($_GET['post']);
foreach (array('description', 'source', 'title', 'tags') as $param) {
}
}
// Redirect to login screen.
- echo '<script>alert("'. t("Wrong login/password.") .'");document.location=\'?do=login'.$redir.'\';</script>';
+ echo '<script>alert("'. t("Wrong login/password.") .'");document.location=\'./login'.$redir.'\';</script>';
exit;
}
}
// Show login screen, then redirect to ?post=...
if (isset($_GET['post'])) {
header( // Redirect to login page, then back to post link.
- 'Location: ?do=login&post='.urlencode($_GET['post']).
+ 'Location: /login?post='.urlencode($_GET['post']).
(!empty($_GET['title'])?'&title='.urlencode($_GET['title']):'').
(!empty($_GET['description'])?'&description='.urlencode($_GET['description']):'').
(!empty($_GET['tags'])?'&tags='.urlencode($_GET['tags']):'').
showLinkList($PAGE, $bookmarkService, $conf, $pluginManager, $loginManager);
if (isset($_GET['edit_link'])) {
- header('Location: ?do=login&edit_link='. escape($_GET['edit_link']));
+ header('Location: /login?edit_link='. escape($_GET['edit_link']));
exit;
}
echo '<script>alert('
.'"Shaarli is now configured. '
.'Please enter your login/password and start shaaring your bookmarks!"'
- .');document.location=\'?do=login\';</script>';
+ .');document.location=\'./login\';</script>';
exit;
}
public function testGenerateLocationLoop()
{
$ref = 'http://localhost/?test';
- $this->assertEquals('?', generateLocation($ref, 'localhost', array('test')));
+ $this->assertEquals('./?', generateLocation($ref, 'localhost', array('test')));
}
/**
public function testGenerateLocationOut()
{
$ref = 'http://somewebsite.com/?test';
- $this->assertEquals('?', generateLocation($ref, 'localhost'));
+ $this->assertEquals('./?', generateLocation($ref, 'localhost'));
}
</li>
{else}
<li class="pure-menu-item pure-u-lg-0 shaarli-menu-mobile" id="shaarli-menu-mobile-login">
- <a href="?do=login" class="pure-menu-link">{'Login'|t}</a>
+ <a href="/login" class="pure-menu-link">{'Login'|t}</a>
</li>
{/if}
</ul>
</li>
{if="!$is_logged_in"}
<li class="pure-menu-item" id="shaarli-menu-desktop-login">
- <a href="?do=login" class="pure-menu-link"
+ <a href="/login" class="pure-menu-link"
data-open-id="header-login-form"
id="login-button" aria-label="{'Login'|t}" title="{'Login'|t}">
<i class="fa fa-user" aria-hidden="true"></i>
<li><a href="?do=tools">Tools</a></li>
<li><a href="?do=addlink">Add link</a></li>
{else}
- <li><a href="?do=login">Login</a></li>
+ <li><a href="/login">Login</a></li>
{/if}
<li><a href="{$feedurl}?do=rss{$searchcrits}" class="nomobile">RSS Feed</a></li>
{if="$showatom"}