Merge branch 'master' into patch-6

This commit is contained in:
Lucas Bartholemy 2019-05-27 21:04:15 +02:00 committed by GitHub
commit 2d920b866a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
949 changed files with 19646 additions and 7225 deletions

17
.github/no-response.yml vendored Normal file
View File

@ -0,0 +1,17 @@
# Configuration for probot-no-response - https://github.com/probot/no-response
# Number of days of inactivity before an Issue is closed for lack of response
daysUntilClose: 8
# Label requiring a response
responseRequiredLabel: Status:Need more information
# Comment to post when closing an Issue for lack of response. Set to `false` to disable
closeComment: >
This issue has been automatically closed because there has been no response
to our request for more information from the original author. With only the
information that is currently in the issue, we don't have enough information
to take action. Please reach out if you have or find the answers we need so
that we can investigate further.

3
.gitignore vendored
View File

@ -24,7 +24,6 @@ uploads/profile_image/banner/*
nbproject
.idea/*
.gitmodules
.github
themes/*
!themes/HumHub
@ -37,4 +36,4 @@ favicon.ico
**/tests/codeception/_support/_generated/**
**/tests/codeception/_output/**
**/tests/codeception/_output/**

View File

@ -14,7 +14,7 @@ php:
- 7.0
- 7.1
- 7.2
# - 7.3
- 7.3
matrix:
fast_finish: true
jobs:

View File

@ -3,6 +3,7 @@ HumHub - Social Network Kit
[![Build Status](https://travis-ci.org/humhub/humhub.svg?branch=master)](https://travis-ci.org/humhub/humhub)
[![Yii2](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](http://www.yiiframework.com/)
[![CLA assistant](https://cla-assistant.io/readme/badge/humhub/humhub)](https://cla-assistant.io/humhub/humhub)
HumHub is a feature rich and highly flexible OpenSource Social Network Kit written in PHP.

View File

@ -66,7 +66,6 @@
"codeception/codeception": "2.4.5",
"codeception/specify": "~0.4 || ~1.0",
"codeception/verify": "~0.4 || ~1.0",
"yiisoft/yii2-apidoc": "~2.1.0",
"yiisoft/yii2-debug": "~2.0.0",
"yiisoft/yii2-faker": "~2.0.0",
"yiisoft/yii2-gii": "~2.0.0"

1119
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,439 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Stdlib;
use ArrayAccess;
use Countable;
use IteratorAggregate;
use Serializable;
use Zend\Stdlib\Exception\InvalidArgumentException;
/**
* ***** PHP 7.3 modified variant of ZF2 Array Object *****
*
* Custom framework ArrayObject implementation
*
* Extends version-specific "abstract" implementation.
*/
class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
{
/**
* Properties of the object have their normal functionality
* when accessed as list (var_dump, foreach, etc.).
*/
const STD_PROP_LIST = 1;
/**
* Entries can be accessed as properties (read and write).
*/
const ARRAY_AS_PROPS = 2;
/**
* @var array
*/
protected $storage;
/**
* @var int
*/
protected $flag;
/**
* @var string
*/
protected $iteratorClass;
/**
* @var array
*/
protected $protectedProperties;
/**
* Constructor
*
* @param array $input
* @param int $flags
* @param string $iteratorClass
*/
public function __construct($input = [], $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
{
$this->setFlags($flags);
$this->storage = $input;
$this->setIteratorClass($iteratorClass);
$this->protectedProperties = array_keys(get_object_vars($this));
}
/**
* Returns whether the requested key exists
*
* @param mixed $key
* @return bool
*/
public function __isset($key)
{
if ($this->flag == self::ARRAY_AS_PROPS) {
return $this->offsetExists($key);
}
if (in_array($key, $this->protectedProperties)) {
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
}
return isset($this->$key);
}
/**
* Sets the value at the specified key to value
*
* @param mixed $key
* @param mixed $value
* @return void
*/
public function __set($key, $value)
{
if ($this->flag == self::ARRAY_AS_PROPS) {
return $this->offsetSet($key, $value);
}
if (in_array($key, $this->protectedProperties)) {
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
}
$this->$key = $value;
}
/**
* Unsets the value at the specified key
*
* @param mixed $key
* @return void
*/
public function __unset($key)
{
if ($this->flag == self::ARRAY_AS_PROPS) {
return $this->offsetUnset($key);
}
if (in_array($key, $this->protectedProperties)) {
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
}
unset($this->$key);
}
/**
* Returns the value at the specified key by reference
*
* @param mixed $key
* @return mixed
*/
public function &__get($key)
{
$ret = null;
if ($this->flag == self::ARRAY_AS_PROPS) {
$ret =& $this->offsetGet($key);
return $ret;
}
if (in_array($key, $this->protectedProperties)) {
throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
}
return $this->$key;
}
/**
* Appends the value
*
* @param mixed $value
* @return void
*/
public function append($value)
{
$this->storage[] = $value;
}
/**
* Sort the entries by value
*
* @return void
*/
public function asort()
{
asort($this->storage);
}
/**
* Get the number of public properties in the ArrayObject
*
* @return int
*/
public function count()
{
return count($this->storage);
}
/**
* Exchange the array for another one.
*
* @param array|ArrayObject $data
* @return array
*/
public function exchangeArray($data)
{
if (!is_array($data) && !is_object($data)) {
throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
}
if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
$data = $data->getArrayCopy();
}
if (!is_array($data)) {
$data = (array)$data;
}
$storage = $this->storage;
$this->storage = $data;
return $storage;
}
/**
* Creates a copy of the ArrayObject.
*
* @return array
*/
public function getArrayCopy()
{
return $this->storage;
}
/**
* Gets the behavior flags.
*
* @return int
*/
public function getFlags()
{
return $this->flag;
}
/**
* Create a new iterator from an ArrayObject instance
*
* @return \Iterator
*/
public function getIterator()
{
$class = $this->iteratorClass;
return new $class($this->storage);
}
/**
* Gets the iterator classname for the ArrayObject.
*
* @return string
*/
public function getIteratorClass()
{
return $this->iteratorClass;
}
/**
* Sort the entries by key
*
* @return void
*/
public function ksort()
{
ksort($this->storage);
}
/**
* Sort an array using a case insensitive "natural order" algorithm
*
* @return void
*/
public function natcasesort()
{
natcasesort($this->storage);
}
/**
* Sort entries using a "natural order" algorithm
*
* @return void
*/
public function natsort()
{
natsort($this->storage);
}
/**
* Returns whether the requested key exists
*
* @param mixed $key
* @return bool
*/
public function offsetExists($key)
{
return isset($this->storage[$key]);
}
/**
* Returns the value at the specified key
*
* @param mixed $key
* @return mixed
*/
public function &offsetGet($key)
{
$ret = null;
if (!$this->offsetExists($key)) {
return $ret;
}
$ret =& $this->storage[$key];
return $ret;
}
/**
* Sets the value at the specified key to value
*
* @param mixed $key
* @param mixed $value
* @return void
*/
public function offsetSet($key, $value)
{
$this->storage[$key] = $value;
}
/**
* Unsets the value at the specified key
*
* @param mixed $key
* @return void
*/
public function offsetUnset($key)
{
if ($this->offsetExists($key)) {
unset($this->storage[$key]);
}
}
/**
* Serialize an ArrayObject
*
* @return string
*/
public function serialize()
{
return serialize(get_object_vars($this));
}
/**
* Sets the behavior flags
*
* @param int $flags
* @return void
*/
public function setFlags($flags)
{
$this->flag = $flags;
}
/**
* Sets the iterator classname for the ArrayObject
*
* @param string $class
* @return void
*/
public function setIteratorClass($class)
{
if (class_exists($class)) {
$this->iteratorClass = $class;
return;
}
if (strpos($class, '\\') === 0) {
$class = '\\' . $class;
if (class_exists($class)) {
$this->iteratorClass = $class;
return;
}
}
throw new Exception\InvalidArgumentException('The iterator class does not exist');
}
/**
* Sort the entries with a user-defined comparison function and maintain key association
*
* @param callable $function
* @return void
*/
public function uasort($function)
{
if (is_callable($function)) {
uasort($this->storage, $function);
}
}
/**
* Sort the entries by keys using a user-defined comparison function
*
* @param callable $function
* @return void
*/
public function uksort($function)
{
if (is_callable($function)) {
uksort($this->storage, $function);
}
}
/**
* Unserialize an ArrayObject
*
* @param string $data
* @return void
*/
public function unserialize($data)
{
$ar = unserialize($data);
$this->protectedProperties = array_keys(get_object_vars($this));
$this->setFlags($ar['flag']);
$this->exchangeArray($ar['storage']);
$this->setIteratorClass($ar['iteratorClass']);
foreach ($ar as $k => $v) {
switch ($k) {
case 'flag':
$this->setFlags($v);
break;
case 'storage':
$this->exchangeArray($v);
break;
case 'iteratorClass':
$this->setIteratorClass($v);
break;
case 'protectedProperties':
// continue;
// HUMHUB MODIFICATION
continue 2;
default:
$this->__set($k, $v);
}
}
}
}

View File

@ -106,7 +106,9 @@ abstract class SocialActivity extends \yii\base\BaseObject implements rendering\
* Static initializer should be prefered over new initialization, since it makes use
* of Yii::createObject dependency injection/configuration.
*
* @param array $options
* @return static
* @throws \yii\base\InvalidConfigException
*/
public static function instance($options = [])
{

View File

@ -11,9 +11,12 @@ Yii::setAlias('@humhub', '@app/humhub');
Yii::setAlias('@config', '@app/config');
Yii::setAlias('@themes', '@webroot/themes');
// Workaround: PHP 7.3 compatible ZF2 ArrayObject class
Yii::$classMap['Zend\Stdlib\ArrayObject'] = '@humhub/compat/ArrayObject.php';
$config = [
'name' => 'HumHub',
'version' => '1.3.13-pre',
'version' => '1.3.13',
'basePath' => dirname(__DIR__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR,
'bootstrap' => ['log', 'humhub\components\bootstrap\ModuleAutoLoader', 'queue', 'humhub\modules\ui\view\bootstrap\ThemeLoader'],
'sourceLanguage' => 'en',
@ -208,7 +211,7 @@ $config = [
'ldap' => [
// LDAP date field formats
'dateFields' => [
//'birthday' => 'Y.m.d'
//'birthday' => 'Y.m.d'
],
],
'formatter' => [
@ -223,10 +226,10 @@ $config = [
// Seconds before hide time from timeago date
// Set to false to always display time
'timeAgoHideTimeAfter' => 259200,
// Optional: Callback for TimageAgo FullDateFormat
//'timeAgoFullDateCallBack' => function($timestamp) {
// return 'formatted';
//}
// Optional: Callback for TimageAgo FullDateFormat
//'timeAgoFullDateCallBack' => function($timestamp) {
// return 'formatted';
//}
],
'humhub' => [
// Marketplace / New Version Check

View File

@ -36,7 +36,7 @@ class OembedController extends Controller
$urls = Yii::$app->request->post('urls', []);
$result = [];
foreach ($urls as $url) {
$oembed = UrlOembed::GetOEmbed($url);
$oembed = UrlOembed::getOEmbed($url);
if ($oembed) {
$result[$url] = $oembed;
}

View File

@ -1,10 +1,29 @@
HumHub Change Log
=================
1.3.13 (Unreleased)
1.3.14 (Unreleased)
---------------------------
- Fix: LinkedIn API call to v1 deprecated use v2 (@Felli)
1.3.13 (May 3, 2019)
----------------------
- Enh: Added HomeUrl support to ConsoleApplication
- Fix: API call to v1 deprecated use v2
- Fix #2536: Incorrect log of "Attempt to steal file" due to faulty File::isAssignedTo() check
- Fix: Wrong help block position in admin basic settings
- Chng: Removed yiisoft/yii2-apidoc dependency
- Enh: Double file extension check is now optional and disabled by default
- Fix #3552: `humhub\modules\user\authclient\AuthAction:auth()` not compatible with `yii\authclient\AuthAction:auth()`
- Fix #3545: OEmbed fetch limit ignored
- Enh: Added `humhub\libs\RestrictedCallException`
- Chng: Switched from [bootstrap-tour](https://github.com/sorich87/bootstrap-tour) to [bootstrap-tourist](https://github.com/IGreatlyDislikeJavascript/bootstrap-tourist) due to incompatibility to bootstrap v3.4.1
- Enh: Added `humhub.modules.tour` module for handling tour logic
- Fix: Added PHP 7.3 compatibility workaround for ZF2 ArrayObject
- Fix #3513: Profile schema cache not refreshed after adding new profile field
- Fix: Removed Codeception files from HumHub packages builds due to possible XSS flaw (thanks to Kağan Eğlence)
- Fix #3534: Mark ID Attribute in LDAP settings as required
1.3.12 (March 26, 2019)
---------------------------
@ -15,9 +34,9 @@ HumHub Change Log
- Fix: Richtext preview new line backslash issue
- Enh: Migrated LDAP features into own submodule
- Enh: Added new LDAP command line tools
- Fix: #3347: Fixed searching members in space and users with white space in full name (Baleks)
- Fix #3347: Fixed searching members in space and users with white space in full name (Baleks)
- Fix: Deleted Records are not correctly removed from the search index
- Fix: #3459 Notification counter increment after manual notification fetch
- Fix #3459: Notification counter increment after manual notification fetch
- Fix: Notification count update does not respect notification group
- Fix: Change email form is restricted to max 45 characters. Changed to 150 (current DB restriction)
- Fix: Footer menu renders redundant `<li>` end tag.

View File

@ -25,5 +25,6 @@ Administration Topics
* [Asynchronous Task Processing](asynchronous-tasks.md)
* [Authentication and LDAP](authentication.md)
* [Search System](search.md)
* [Permission defaults](permissions.md)
* [Translations](translations.md)
* [Troubleshooting and Help](troubleshooting.md)

View File

@ -54,27 +54,6 @@ Available params:
- `allowedLanguages` see the [Translations Section](translations.md)
- `enablePjax` used to disable/enable pjax support (default true)
## Overwrite default Permissions
Default permission can be overwritten within `humhub/config/common.php` by means of the `defaultPermissions` params array.
The following example overwrites the default permission of `humhub\modules\mymodule\permissions\MyPermission` for the
given groups.
```
return [
'params' => [
'defaultPermissions' => [
'humhub\modules\mymodule\permissions\MyPermission' => [
\humhub\modules\user\models\User::USERGROUP_SELF => \humhub\libs\BasePermission::STATE_ALLOW,
\humhub\modules\user\models\User::USERGROUP_USER => \humhub\libs\BasePermission::STATE_ALLOW,
\humhub\modules\user\models\User::USERGROUP_FRIEND => \humhub\libs\BasePermission::STATE_ALLOW,
\humhub\modules\user\models\User::USERGROUP_GUEST => \humhub\libs\BasePermission::STATE_ALLOW,
],
]
]
]
```
# Statistics/Tracking

View File

@ -0,0 +1,96 @@
Permission defaults
===================
Permission defaults can be overwritten within the file `humhub/config/common.php` ([Advanced Configuration](advanced-configuration.md)) by means of the `defaultPermissions` params array.
The following example overwrites the default permission of `humhub\modules\mymodule\permissions\MyPermission` for the given groups.
```
return [
'params' => [
'defaultPermissions' => [
'humhub\modules\mymodule\permissions\MyPermission' => [
\humhub\modules\user\models\User::USERGROUP_SELF => \humhub\libs\BasePermission::STATE_ALLOW,
\humhub\modules\user\models\User::USERGROUP_USER => \humhub\libs\BasePermission::STATE_ALLOW,
\humhub\modules\user\models\User::USERGROUP_FRIEND => \humhub\libs\BasePermission::STATE_ALLOW,
\humhub\modules\user\models\User::USERGROUP_GUEST => \humhub\libs\BasePermission::STATE_ALLOW,
],
]
]
]
```
User Groups
-----------
Available user groups in profile context:
| Group | Description |
|---|---|
| \humhub\modules\user\models\User::USERGROUP_SELF | The user himself |
| \humhub\modules\user\models\User::USERGROUP_USER | Any registered user |
| \humhub\modules\user\models\User::USERGROUP_FRIEND | A befriended user |
| \humhub\modules\user\models\User::USERGROUP_GUEST | Any user, even unauthenticated if available |
Available user groups in space context:
| Group | Description |
|---|---|
| \humhub\modules\user\models\User::USERGROUP_OWNER | The owner of the space |
| \humhub\modules\user\models\User::USERGROUP_ADMIN | An administrator of the space |
| \humhub\modules\user\models\User::USERGROUP_MODERATOR | A moderator of the space |
| \humhub\modules\user\models\User::USERGROUP_MEMBER | A member of the space |
| \humhub\modules\user\models\User::USERGROUP_USER | Any registered user |
| \humhub\modules\user\models\User::USERGROUP_GUEST | Any user, even unauthenticated if available |
Core Permissions
-----------------
Global context
| Class | Description |
|---|---|
| \humhub\modules\admin\permissions\ManageGroups | Manage user groups |
| \humhub\modules\admin\permissions\ManageModules | Manage installed modules |
| \humhub\modules\admin\permissions\ManageSettings | Manage administrative settings |
| \humhub\modules\admin\permissions\ManageSpaces | Manage spaces |
| \humhub\modules\admin\permissions\ManageUsers | Manage users |
| \humhub\modules\admin\permissions\SeeAdminInformation | Access to administrative informations |
| \humhub\modules\space\permissions\CreatePrivateSpace | The user is allowed to create private spaces. |
| \humhub\modules\space\permissions\CreatePublicSpace | The user is allowed to create public spaces. |
Content Container (Space or Profile) context
| Class | Description |
|---|---|
| \humhub\modules\user\permissions\ViewAboutPage | Access to the profile about page. (User profile only!) |
| \humhub\modules\comment\permissions\CreateComment | Allowed to create new comments. |
| \humhub\modules\post\permissions\CreatePost | Allowed to create new posts. |
| \humhub\modules\topic\permissions\AddTopic | Allowed to create new topics. |
| \humhub\modules\topic\permissions\ManageTopics | Allowed to manage existing topics. |
Examples
--------
### Even unfriended users can access the "About" page.
```
return [
'params' => [
'defaultPermissions' => [
'humhub\modules\user\permissions\ViewAboutPage' => [
\humhub\modules\user\models\User::USERGROUP_USER => \humhub\libs\BasePermission::STATE_ALLOW,
],
]
]
]
```

View File

@ -0,0 +1,20 @@
<?php
namespace humhub\libs;
/**
* Class RestrictedCallException
* @package humhub\libs
* @since 1.3.13
*/
class RestrictedCallException extends \Exception
{
/**
* @return string the user-friendly name of this exception
*/
public function getName()
{
return 'Restricted Call';
}
}

View File

@ -0,0 +1,23 @@
<?php
/**
* Created by PhpStorm.
* User: buddha
* Date: 29.04.2019
* Time: 16:04
*/
namespace humhub\libs;
interface UrlOembedClient
{
/**
* Fetches a given $url and returns the oembed result array.
*
* The resulting array should at least contain an `html` with a html preview and a `type` field.
*
* @param string $url
* @return array|null
*/
public function fetchUrl($url);
}

View File

@ -0,0 +1,71 @@
<?php
namespace humhub\libs;
use Yii;
use yii\helpers\Json;
class UrlOembedHttpClient implements UrlOembedClient
{
const RESPONSE_UNAUTHORIZED = 'Unauthorized';
const RESPONSE_NOT_FOUND = 'Not Found';
const ERROR_RESPONSES = [
self::RESPONSE_NOT_FOUND,
self::RESPONSE_UNAUTHORIZED
];
/**
* @inheritdoc
*/
public function fetchUrl($url)
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
// Not available when open_basedir or safe_mode is set.
if (!function_exists('ini_get') || !ini_get('open_basedir') || !ini_get('safe_mode')) {
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
}
if (Yii::$app->settings->get('proxy.enabled')) {
curl_setopt($curl, CURLOPT_PROXY, Yii::$app->settings->get('proxy.server'));
curl_setopt($curl, CURLOPT_PROXYPORT, Yii::$app->settings->get('proxy.port'));
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
if (defined('CURLOPT_PROXYUSERNAME')) {
curl_setopt($curl, CURLOPT_PROXYUSERNAME, Yii::$app->settings->get('proxy.user'));
}
if (defined('CURLOPT_PROXYPASSWORD')) {
curl_setopt($curl, CURLOPT_PROXYPASSWORD, Yii::$app->settings->get('proxy.password'));
}
if (defined('CURLOPT_NOPROXY')) {
curl_setopt($curl, CURLOPT_NOPROXY, Yii::$app->settings->get('proxy.noproxy'));
}
}
$return = curl_exec($curl);
curl_close($curl);
return $this->parseJson($return);
}
/**
* @param $json
* @return string|null
*/
protected function parseJson($json)
{
try {
if(!empty($json) && !in_array($json, static::ERROR_RESPONSES, true)) {
return Json::decode($json);
}
} catch (\Exception $ex) {
Yii::warning($ex);
}
return null;
}
}

View File

@ -1,82 +1,100 @@
<?php
return array (
'<strong>Confirm</strong> Action' => '<strong>የማረጋገጫ</strong> ተግባር',
'<strong>Latest</strong> updates' => '<strong>የቅርብ</strong> ማዘመኛ',
'<strong>Mail</strong> summary' => '<strong>የኢሜል</strong> መግለጫ',
'Account settings' => 'የአካውንት ማስተካከያ',
'Add:' => 'አክል፡',
'Administration' => 'አስተዳዳሪ',
'Allow' => 'ፍቀድ',
'An error occurred while handling your last action. (Handler not found).' => 'የመጨረሻውን ተግባርዎን ሲከውኑ ስህተት ተከስቷል። (ማስተካከያው አልተገኘም)።',
'An unexpected error occurred while loading the search result.' => 'የፍለጋ ውጤቱ በሂደት ላይ ሳለ ያልተጠበቀ ስህተት ተከስቷል።',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎን የድረገፁን አስተዳዳሪ ያግኙ።',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ የሰርቨር ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎ የድረገፁን አስተዳዳሪ ያግኙ።',
'An unknown error occurred while uploading.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል።',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል። ፍንጭ፡ upload_max_filesize እና post_max_size php ማተካከያዎችን ያረጋግጡ።',
'Back' => 'ተመለስ',
'Back to dashboard' => 'ወደማተግበሪያሰሌዳው ይመለሱ',
'Cancel' => 'ተው',
'Choose language:' => 'ቋንቋ ይምረጡ፡',
'Close' => 'ዝጋ',
'Collapse' => 'አጥፋ',
'Confirm' => 'አረጋግጥ',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'የይዘት ታካዮች ምንጭ እንደHActiveRecoredContet ወይም HActiveRecordContentAddon ሆኖ ምሳሌ ሆኖ መቀመጥ ይኖርበታል!',
'Copy to clipboard' => 'ወደማስፈሪያሰሌዳው ገልብጥ።',
'Could not find content of addon!' => 'የታካዩ ይዘት ሊገኝ አልቻለም!',
'Could not find requested page.' => 'የተጠየቀው ገፅ ሊገኝ አልቻለም።',
'Default' => 'ነባሪ',
'Delete' => 'አስወግድ',
'Deny' => 'ከልክል',
'Do you really want to perform this action?' => 'ይህን ተግባር ለመከወን ይፈልጋሉ?',
'Edit' => 'አስተካክል',
'Error' => 'ስህተት',
'Error while running your last action (Invalid request method).' => 'የመጨረሻ ተግባርዎን በመከወን ላይ ሳሉ ስህተት ተፈጥሯል። (የማያገለግል የመጠየቂያ መንገድ ነው)።',
'Error:' => 'ስህተት፡',
'Expand' => 'አስፋ',
'Export' => 'ላክ',
'Info:' => 'መረጃ፡',
'Invalid request method!' => 'የማያገለግል የመጠየቂያ መንገድ ነው!',
'It looks like you may have taken the wrong turn.' => 'የተሳሳተ የመመለሻ መንገድ ሳይጠቀሙ አልቀሩም።',
'Language' => 'ቋንቋ',
'Loading...' => 'በመጫን ላይ...',
'Login' => 'ይግቡ',
'Logo of {appName}' => 'የ{appName} ልዩ ምስል',
'Logout' => 'ይውጡ',
'Menu' => 'ማውጫ',
'Module is not enabled on this content container!' => 'ሞጁሉ በዚህ የይዘት ማዕቀፍ ላይ አይሰራም!',
'My profile' => 'የግል መረጃዬ',
'My profile image' => 'የግል መርጃ ምስሌ',
'New profile image' => 'አዲስ የግል መረጃ ምስል',
'Next' => 'ቀጥሎ',
'No error information given.' => 'የተሳሳተ መረጃ አልተሰጠም።',
'Oooops...' => 'ውይይይ...',
'Open' => 'ክፈት',
'Please type at least 3 characters' => 'እባክዎን ቢያንስ 3 የፅሁፍ ምልክቶችን ይፃፉ',
'Please type at least {count} characters' => 'እባክዎን ቢያንስ {count} የፅሁፍ ምልክቶችን ይፃፉ',
'Profile dropdown' => 'የግል መረጃ ዝርዝር',
'Profile image of {displayName}' => 'የ{displayName} የግል መረጃ የግል ምስል',
'Profile picture of {displayName}' => 'የ{displayName} የግል መረጃ ምስል',
'Save' => 'አስቀምጥ',
'Saved' => 'ተቀምጧል',
'Search' => 'ፈልግ',
'Select Me' => 'ይምረጡኝ ',
'Show less' => 'በትንሹ አሳይ',
'Show more' => 'በዝርዝር አሳይ',
'Some files could not be uploaded:' => 'አንዳንድ ፋይሎች ሊጫኑ አልቻሉም፡',
'Text could not be copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ላይ ሊገለበጥ አልቻለም',
'Text has been copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ተገልብጧል',
'The date has to be in the past.' => 'ቀኑ ያለፈ መሆን ይኖርበታል።',
'The file has been deleted.' => 'ፋይሉ ተወግዷል።',
'The requested resource could not be found.' => 'የተጠየቀው ምንጭ ሊገኝ አልቻለም። ',
'The space has been archived.' => 'መወያያው ተመዝግቧል።',
'The space has been unarchived.' => 'መወያያው አልተመዘገበም።',
'Time Zone' => 'የጊዜ ቀጠና',
'Toggle comment menu' => 'የአስተያየት ማውጫ መቀያየሪያ',
'Toggle panel menu' => 'የማውጫ ፓናል መቀያየሪያ',
'Toggle post menu' => 'የልጥፍ ማውጫ መቀያየሪያ',
'Toggle stream entry menu' => 'የማስተላለፊያ መግቢያ ዝርዝር መቀያየሪያ',
'Unsubscribe' => 'ምዝገባው ይቅር',
'Upload' => 'ጫን',
'Upload file' => 'ፋይል ጫን',
'You are not allowed to run this action.' => 'ይህን ተግባር ለማከናወን አልተፈቀደልዎትም።',
);
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Powered by {name}' => '',
'<strong>Confirm</strong> Action' => '<strong>የማረጋገጫ</strong> ተግባር',
'<strong>Latest</strong> updates' => '<strong>የቅርብ</strong> ማዘመኛ',
'<strong>Mail</strong> summary' => '<strong>የኢሜል</strong> መግለጫ',
'Account settings' => 'የአካውንት ማስተካከያ',
'Add:' => 'አክል፡',
'Administration' => 'አስተዳዳሪ',
'Allow' => 'ፍቀድ',
'An error occurred while handling your last action. (Handler not found).' => 'የመጨረሻውን ተግባርዎን ሲከውኑ ስህተት ተከስቷል። (ማስተካከያው አልተገኘም)።',
'An unexpected error occurred while loading the search result.' => 'የፍለጋ ውጤቱ በሂደት ላይ ሳለ ያልተጠበቀ ስህተት ተከስቷል።',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎን የድረገፁን አስተዳዳሪ ያግኙ።',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'ያልተጠበቀ የሰርቨር ስህተት ተከስቷል። ይህ የሚቀጥል ከሆነ፣ እባክዎ የድረገፁን አስተዳዳሪ ያግኙ።',
'An unknown error occurred while uploading.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል።',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'በመጫን ሂደት ላይ ሳለ ስህተት ተከስቷል። ፍንጭ፡ upload_max_filesize እና post_max_size php ማተካከያዎችን ያረጋግጡ።',
'Back' => 'ተመለስ',
'Back to dashboard' => 'ወደማተግበሪያሰሌዳው ይመለሱ',
'Cancel' => 'ተው',
'Choose language:' => 'ቋንቋ ይምረጡ፡',
'Close' => 'ዝጋ',
'Collapse' => 'አጥፋ',
'Confirm' => 'አረጋግጥ',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'የይዘት ታካዮች ምንጭ እንደHActiveRecoredContet ወይም HActiveRecordContentAddon ሆኖ ምሳሌ ሆኖ መቀመጥ ይኖርበታል!',
'Copy to clipboard' => 'ወደማስፈሪያሰሌዳው ገልብጥ።',
'Could not find content of addon!' => 'የታካዩ ይዘት ሊገኝ አልቻለም!',
'Could not find requested page.' => 'የተጠየቀው ገፅ ሊገኝ አልቻለም።',
'Default' => 'ነባሪ',
'Delete' => 'አስወግድ',
'Deny' => 'ከልክል',
'Do you really want to perform this action?' => 'ይህን ተግባር ለመከወን ይፈልጋሉ?',
'Edit' => 'አስተካክል',
'Error' => 'ስህተት',
'Error while running your last action (Invalid request method).' => 'የመጨረሻ ተግባርዎን በመከወን ላይ ሳሉ ስህተት ተፈጥሯል። (የማያገለግል የመጠየቂያ መንገድ ነው)።',
'Error:' => 'ስህተት፡',
'Expand' => 'አስፋ',
'Export' => 'ላክ',
'Info:' => 'መረጃ፡',
'Invalid request method!' => 'የማያገለግል የመጠየቂያ መንገድ ነው!',
'It looks like you may have taken the wrong turn.' => 'የተሳሳተ የመመለሻ መንገድ ሳይጠቀሙ አልቀሩም።',
'Language' => 'ቋንቋ',
'Loading...' => 'በመጫን ላይ...',
'Login' => 'ይግቡ',
'Logo of {appName}' => 'የ{appName} ልዩ ምስል',
'Logout' => 'ይውጡ',
'Menu' => 'ማውጫ',
'Module is not enabled on this content container!' => 'ሞጁሉ በዚህ የይዘት ማዕቀፍ ላይ አይሰራም!',
'My profile' => 'የግል መረጃዬ',
'My profile image' => 'የግል መርጃ ምስሌ',
'New profile image' => 'አዲስ የግል መረጃ ምስል',
'Next' => 'ቀጥሎ',
'No error information given.' => 'የተሳሳተ መረጃ አልተሰጠም።',
'Oooops...' => 'ውይይይ...',
'Open' => 'ክፈት',
'Please type at least 3 characters' => 'እባክዎን ቢያንስ 3 የፅሁፍ ምልክቶችን ይፃፉ',
'Please type at least {count} characters' => 'እባክዎን ቢያንስ {count} የፅሁፍ ምልክቶችን ይፃፉ',
'Profile dropdown' => 'የግል መረጃ ዝርዝር',
'Profile image of {displayName}' => 'የ{displayName} የግል መረጃ የግል ምስል',
'Profile picture of {displayName}' => 'የ{displayName} የግል መረጃ ምስል',
'Save' => 'አስቀምጥ',
'Saved' => 'ተቀምጧል',
'Search' => 'ፈልግ',
'Select Me' => 'ይምረጡኝ ',
'Show less' => 'በትንሹ አሳይ',
'Show more' => 'በዝርዝር አሳይ',
'Some files could not be uploaded:' => 'አንዳንድ ፋይሎች ሊጫኑ አልቻሉም፡',
'Text could not be copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ላይ ሊገለበጥ አልቻለም',
'Text has been copied to clipboard' => 'ፅሁፉ ወደማስፈሪያ ሰሌዳው ተገልብጧል',
'The date has to be in the past.' => 'ቀኑ ያለፈ መሆን ይኖርበታል።',
'The file has been deleted.' => 'ፋይሉ ተወግዷል።',
'The requested resource could not be found.' => 'የተጠየቀው ምንጭ ሊገኝ አልቻለም። ',
'The space has been archived.' => 'መወያያው ተመዝግቧል።',
'The space has been unarchived.' => 'መወያያው አልተመዘገበም።',
'Time Zone' => 'የጊዜ ቀጠና',
'Toggle comment menu' => 'የአስተያየት ማውጫ መቀያየሪያ',
'Toggle panel menu' => 'የማውጫ ፓናል መቀያየሪያ',
'Toggle post menu' => 'የልጥፍ ማውጫ መቀያየሪያ',
'Toggle stream entry menu' => 'የማስተላለፊያ መግቢያ ዝርዝር መቀያየሪያ',
'Unsubscribe' => 'ምዝገባው ይቅር',
'Upload' => 'ጫን',
'Upload file' => 'ፋይል ጫን',
'You are not allowed to run this action.' => 'ይህን ተግባር ለማከናወን አልተፈቀደልዎትም።',
];

File diff suppressed because one or more lines are too long

View File

@ -27,6 +27,7 @@ return [
'Invalid request method!' => '',
'Module is not enabled on this content container!' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',

View File

@ -43,6 +43,7 @@ return [
'No error information given.' => '',
'Open' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -53,6 +53,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -0,0 +1,21 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Invalid content id given!' => '',
];

View File

@ -0,0 +1,100 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Confirm</strong> Action' => '',
'<strong>Latest</strong> updates' => '',
'<strong>Mail</strong> summary' => '',
'Account settings' => '',
'Add:' => '',
'Administration' => '',
'Allow' => '',
'An error occurred while handling your last action. (Handler not found).' => '',
'An unexpected error occurred while loading the search result.' => '',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unknown error occurred while uploading.' => '',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
'Back' => '',
'Back to dashboard' => '',
'Cancel' => '',
'Choose language:' => '',
'Close' => '',
'Collapse' => '',
'Confirm' => '',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => '',
'Copy to clipboard' => '',
'Could not find content of addon!' => '',
'Could not find requested page.' => '',
'Default' => '',
'Delete' => '',
'Deny' => '',
'Do you really want to perform this action?' => '',
'Edit' => '',
'Error' => '',
'Error while running your last action (Invalid request method).' => '',
'Error:' => '',
'Expand' => '',
'Export' => '',
'Info:' => '',
'Invalid request method!' => '',
'It looks like you may have taken the wrong turn.' => '',
'Language' => '',
'Loading...' => '',
'Login' => '',
'Logo of {appName}' => '',
'Logout' => '',
'Menu' => '',
'Module is not enabled on this content container!' => '',
'My profile' => '',
'My profile image' => '',
'New profile image' => '',
'Next' => '',
'No error information given.' => '',
'Oooops...' => '',
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Save' => '',
'Saved' => '',
'Search' => '',
'Select Me' => '',
'Show less' => '',
'Show more' => '',
'Some files could not be uploaded:' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'The date has to be in the past.' => '',
'The file has been deleted.' => '',
'The requested resource could not be found.' => '',
'The space has been archived.' => '',
'The space has been unarchived.' => '',
'Time Zone' => '',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'Unsubscribe' => '',
'Upload' => '',
'Upload file' => '',
'You are not allowed to run this action.' => '',
];

View File

@ -0,0 +1,29 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Login</strong> required' => '',
'An internal server error occurred.' => '',
'Guest mode not active, please login first.' => '',
'Login required for this section.' => '',
'You are not allowed to perform this action.' => '',
'You are not permitted to access this section.' => '',
'You need admin permissions to access this section.' => '',
'Your user account has not been approved yet, please try again later or contact a network administrator.' => '',
'Your user account is inactive, please login with an active account or contact a network administrator.' => '',
];

View File

@ -0,0 +1,51 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Add image/file' => '',
'Add link' => '',
'Bold' => '',
'Close' => '',
'Code' => '',
'Enter a url (e.g. http://example.com)' => '',
'Heading' => '',
'Image' => '',
'Image/File' => '',
'Insert Hyperlink' => '',
'Insert Image Hyperlink' => '',
'Italic' => '',
'List' => '',
'Ordered List' => '',
'Please wait while uploading...' => '',
'Preview' => '',
'Quote' => '',
'Target' => '',
'Title' => '',
'Title of your link' => '',
'URL/Link' => '',
'Unordered List' => '',
'code text here' => '',
'emphasized text' => '',
'enter image description here' => '',
'enter image title here' => '',
'enter link description here' => '',
'heading text' => '',
'list text here' => '',
'quote here' => '',
'strong text' => '',
];

View File

@ -51,6 +51,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -24,6 +24,7 @@ return [
'Export' => '',
'Invalid request method!' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Select Me' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',

View File

@ -42,6 +42,7 @@ return [
'No error information given.' => '',
'Open' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -1,4 +1,4 @@
<?php
return array (
'Invalid content id given!' => 'Ungültige content id!',
'Invalid content id given!' => 'Ungültige Inhalts-ID angegeben!',
);

File diff suppressed because one or more lines are too long

View File

@ -1,100 +1,83 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Confirm</strong> Action' => 'Aktion <strong>bestätigen</strong>
',
'<strong>Latest</strong> updates' => '<strong>Letzte</strong> Aktualisierungen',
'<strong>Mail</strong> summary' => '<strong>E-Mail</strong> Zusammenfassung',
'Account settings' => 'Kontoeinstellungen',
'Add:' => 'Hinzufügen:',
'Administration' => 'Administration',
'Allow' => 'Erlauben',
'An error occurred while handling your last action. (Handler not found).' => 'Während der letzten Aktion ist ein Fehler aufgetreten. (Handler not found)',
'An unexpected error occurred while loading the search result.' => 'Während des Ladens der Suchergebnisse ist ein unerwarteter Fehler aufgetreten.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Fehler ist aufgetreten. Sollte dieser weiterhin auftreten, kontaktiere den Administrator.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Serverfehler ist aufgetreten. Sollte dieser weiterhin auftreten, kontaktiere den Administrator.',
'An unknown error occurred while uploading.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten. Hinweis: Prüfe die PHP-Einstellungen "upload_max_filesize" und "post_max_size".',
'Back' => 'Zurück',
'Back to dashboard' => 'Zurück zur Übersicht',
'Cancel' => 'Abbrechen',
'Choose language:' => 'Sprache wählen:',
'Close' => 'Schließen',
'Collapse' => 'Einklappen',
'Confirm' => 'Bestätigen',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Die Quelle des Addons muss eine Instanz von HActiveRecordContent oder HActiveRecordContentAddon sein!',
'Copy to clipboard' => 'In die Zwischenablage kopieren',
'Could not find content of addon!' => 'Der Inhalt des Addons konnte nicht gefunden werden!',
'Could not find requested page.' => 'Die angeforderte Seite kann nicht gefunden werden.',
'Default' => 'Standard',
'Delete' => 'Löschen',
'Deny' => 'Ablehnen',
'Do you really want to perform this action?' => 'Wollen Sie diese Aktion wirklich ausführen?',
'Edit' => 'Bearbeiten',
'Error' => 'Fehler',
'Error while running your last action (Invalid request method).' => 'Fehler bei der Ausführung der letzten Aktion (Invalid request method).',
'Error:' => 'Fehler:',
'Expand' => 'Erweitern',
'Export' => 'Exportieren',
'Info:' => 'Info:',
'Invalid request method!' => 'Ungültige Anfragemethode!',
'It looks like you may have taken the wrong turn.' => 'Du hast womöglich den falschen Weg eingeschlagen.',
'Language' => 'Sprache',
'Loading...' => 'Lädt...',
'Login' => 'Anmelden',
'Logo of {appName}' => 'Logo von {appName}',
'Logout' => 'Ausloggen',
'Menu' => 'Menü',
'Module is not enabled on this content container!' => 'Dieses Modul ist in diesem Content Container nicht aktiviert!',
'My profile' => 'Mein Profil',
'My profile image' => 'Mein Profilbild',
'New profile image' => 'Neues Profilbild',
'Next' => 'Weiter',
'No error information given.' => 'Keine Fehlerbeschreibung verfügbar.',
'Oooops...' => 'Uuuups...',
'Open' => 'Öffnen',
'Please type at least 3 characters' => 'Bitte mindestens 3 Zeichen eingeben',
'Please type at least {count} characters' => 'Bitte wenigstens {count} Zeichen eingeben',
'Profile dropdown' => 'Profil Dropdown',
'Profile image of {displayName}' => 'Profilbild von {displayName}',
'Profile picture of {displayName}' => 'Profilbild von {displayName}',
'Save' => 'Speichern',
'Saved' => 'Gespeichert',
'Search' => 'Suchen',
'Select Me' => 'Mich auswählen',
'Show less' => 'Weniger anzeigen',
'Show more' => 'Mehr anzeigen',
'Some files could not be uploaded:' => 'Einige Dateien konten nicht hochgeladen werden:',
'Text could not be copied to clipboard' => 'Text konnte nicht in die Zwischenablage kopiert werden',
'Text has been copied to clipboard' => 'Text wurde in die Zwischenablage kopiert',
'The date has to be in the past.' => 'Datum muss in der Vergangenheit liegen.',
'The file has been deleted.' => 'Die Datei wurde gelöscht.',
'The requested resource could not be found.' => 'Die angeforderte Ressource konnte nicht gefunden werden.',
'The space has been archived.' => 'Der Space wurde archiviert.',
'The space has been unarchived.' => 'Der Space wurde dearchiviert.',
'Time Zone' => 'Zeitzone',
'Toggle comment menu' => 'Kommentarmenü umschalten',
'Toggle panel menu' => 'Panelmenü umschalten',
'Toggle post menu' => 'Beitragsmenü umschalten',
'Toggle stream entry menu' => 'Streameintragsmenü umschalten',
'Unsubscribe' => 'Abbestellen',
'Upload' => 'Hochladen',
'Upload file' => 'Datei hochladen',
'You are not allowed to run this action.' => 'Du hast keine Berechtigung, diese Aktion auszuführen.',
];
return array (
'<strong>Confirm</strong> Action' => 'Aktion <strong>bestätigen</strong>',
'<strong>Latest</strong> updates' => '<strong>Letzte</strong> Aktualisierungen',
'<strong>Mail</strong> summary' => '<strong>E-Mail</strong> Zusammenfassung',
'Account settings' => 'Kontoeinstellungen',
'Add:' => 'Hinzufügen:',
'Administration' => 'Administration',
'Allow' => 'Erlauben',
'An error occurred while handling your last action. (Handler not found).' => 'Während der letzten Aktion ist ein Fehler aufgetreten. (Handler not found)',
'An unexpected error occurred while loading the search result.' => 'Während des Ladens der Suchergebnisse ist ein unerwarteter Fehler aufgetreten.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Fehler ist aufgetreten. Sollte dieser weiterhin auftreten kontaktiere den Administrator.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Ein unerwarteter Serverfehler ist aufgetreten. Sollte dieser weiterhin auftreten kontaktiere den Administrator.',
'An unknown error occurred while uploading.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Während des Hochladens ist ein unbekannter Fehler aufgetreten. Hinweis: Prüfe die PHP-Einstellungen "upload_max_filesize" und "post_max_size".',
'Back' => 'Zurück',
'Back to dashboard' => 'Zurück zur Übersicht',
'Cancel' => 'Abbrechen',
'Choose language:' => 'Sprache wählen:',
'Close' => 'Schließen',
'Collapse' => 'Einklappen',
'Confirm' => 'Bestätigen',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Die Quelle des Addons muss eine Instanz von HActiveRecordContent oder HActiveRecordContentAddon sein!',
'Copy to clipboard' => 'In die Zwischenablage kopieren',
'Could not find content of addon!' => 'Der Inhalt des Addons konnte nicht gefunden werden!',
'Could not find requested page.' => 'Die angeforderte Seite kann nicht gefunden werden.',
'Default' => 'Standard',
'Delete' => 'Löschen',
'Deny' => 'Ablehnen',
'Do you really want to perform this action?' => 'Wollen Sie diese Aktion wirklich ausführen?',
'Edit' => 'Bearbeiten',
'Error' => 'Fehler',
'Error while running your last action (Invalid request method).' => 'Fehler bei der Ausführung der letzten Aktion (Invalid request method).',
'Error:' => 'Fehler:',
'Expand' => 'Erweitern',
'Export' => 'Exportieren',
'Info:' => 'Info:',
'Invalid request method!' => 'Ungültige Anfragemethode!',
'It looks like you may have taken the wrong turn.' => 'Du hast womöglich den falschen Weg eingeschlagen.',
'Language' => 'Sprache',
'Loading...' => 'Lädt...',
'Login' => 'Anmelden',
'Logo of {appName}' => 'Logo von {appName}',
'Logout' => 'Ausloggen',
'Menu' => 'Menü',
'Module is not enabled on this content container!' => 'Dieses Modul ist in diesem Content Container nicht aktiviert!',
'My profile' => 'Mein Profil',
'My profile image' => 'Mein Profilbild',
'New profile image' => 'Neues Profilbild',
'Next' => 'Weiter',
'No error information given.' => 'Keine Fehlerbeschreibung verfügbar.',
'Oooops...' => 'Uuuups...',
'Open' => 'Öffnen',
'Please type at least 3 characters' => 'Bitte mindestens 3 Zeichen eingeben',
'Please type at least {count} characters' => 'Bitte wenigstens {count} Zeichen eingeben',
'Powered by {name}' => 'Unterstützt von {name}',
'Profile dropdown' => 'Profil Dropdown',
'Profile image of {displayName}' => 'Profilbild von {displayName}',
'Profile picture of {displayName}' => 'Profilbild von {displayName}',
'Save' => 'Speichern',
'Saved' => 'Gespeichert',
'Search' => 'Suchen',
'Select Me' => 'Mich auswählen',
'Show less' => 'Weniger anzeigen',
'Show more' => 'Mehr anzeigen',
'Some files could not be uploaded:' => 'Einige Dateien konten nicht hochgeladen werden:',
'Text could not be copied to clipboard' => 'Text konnte nicht in die Zwischenablage kopiert werden',
'Text has been copied to clipboard' => 'Text wurde in die Zwischenablage kopiert',
'The date has to be in the past.' => 'Datum muss in der Vergangenheit liegen.',
'The file has been deleted.' => 'Die Datei wurde gelöscht.',
'The requested resource could not be found.' => 'Die angeforderte Ressource konnte nicht gefunden werden.',
'The space has been archived.' => 'Der Space wurde archiviert.',
'The space has been unarchived.' => 'Der Space wurde dearchiviert.',
'Time Zone' => 'Zeitzone',
'Toggle comment menu' => 'Kommentarmenü umschalten',
'Toggle panel menu' => 'Panelmenü umschalten',
'Toggle post menu' => 'Beitragsmenü umschalten',
'Toggle stream entry menu' => 'Streameintragsmenü umschalten',
'Unsubscribe' => 'Abbestellen',
'Upload' => 'Hochladen',
'Upload file' => 'Datei hochladen',
'You are not allowed to run this action.' => 'Du hast keine Berechtigung, diese Aktion auszuführen.',
);

View File

@ -56,6 +56,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -22,6 +22,7 @@ return [
'Delete' => '',
'Edit' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'<strong>Confirm</strong> Action' => '<strong>Confirmar</strong> Acción',

View File

@ -41,6 +41,7 @@ return [
'My profile image' => '',
'No error information given.' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -1,82 +1,100 @@
<?php
return array (
'<strong>Confirm</strong> Action' => '<strong>Vahvista</strong> Toiminto',
'<strong>Latest</strong> updates' => '<strong>Viimeismmät</strong> päivitykset',
'<strong>Mail</strong> summary' => '<strong>Ilmoitukset</strong>',
'Account settings' => 'Asetukset',
'Add:' => 'Lisää:',
'Administration' => 'Hallinta',
'Allow' => 'Salli',
'An error occurred while handling your last action. (Handler not found).' => 'Viimeisen toiminnon käsittelyssä tapahtui virhe. (Käsiteltävää ei löydy).',
'An unexpected error occurred while loading the search result.' => 'Hakutuloksen lataamisen aikana tapahtui odottamaton virhe.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Odottamaton virhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'On tapahtunut odottamaton palvelinvirhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
'An unknown error occurred while uploading.' => 'Latauksen aikana tapahtui tuntematon virhe.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Latauksen aikana tapahtui tuntematon virhe. Vihje: tarkista upload_max_filesize ja post_max_size php-asetukset.',
'Back' => 'Takaisin',
'Back to dashboard' => 'Takaisin etusivulle',
'Cancel' => 'Peruuta',
'Choose language:' => 'Valitse kieli:',
'Close' => 'Sulje',
'Collapse' => 'Sulje',
'Confirm' => 'Vahvista',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sisällön Addon-lähdekoodin on oltava HActiveRecordContent- tai HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopio leikepöydälle',
'Could not find content of addon!' => 'Laajennuksen sisältöä ei löytynyt!',
'Could not find requested page.' => 'Pyydettyä sivua ei löytynyt.',
'Default' => 'Oletus',
'Delete' => 'Poista',
'Deny' => 'Hylkää',
'Do you really want to perform this action?' => 'Haluatko todella suorittaa tämän toiminnon?',
'Edit' => 'Muokkaa',
'Error' => 'Virhe',
'Error while running your last action (Invalid request method).' => 'Virhe viimeistä toimintoa käytettäessä (virheellinen pyyntötapa).',
'Error:' => 'Virhe:',
'Expand' => 'Laajenna',
'Export' => 'Vie',
'Info:' => 'Info:',
'Invalid request method!' => 'Virheellinen pyyntötapa!',
'It looks like you may have taken the wrong turn.' => 'Näyttää siltä, että sinun ei pitäisi olla täällä.',
'Language' => 'Kieli',
'Loading...' => 'Ladataan:',
'Login' => 'Kirjaudu sisään',
'Logo of {appName}' => '{appName} :n logo',
'Logout' => 'Kirjaudu ulos',
'Menu' => 'Valikko',
'Module is not enabled on this content container!' => 'Laajennusta ei ole otettu käyttöön tällä!',
'My profile' => 'Profiili',
'My profile image' => 'Profiili kuva',
'New profile image' => 'Uusi profiili kuva',
'Next' => 'Seuraava',
'No error information given.' => 'Virheilmoituksia ei ole.',
'Oooops...' => 'Upsista...',
'Open' => 'Avaa',
'Please type at least 3 characters' => 'Kirjoita vähintään 3 kirjainta',
'Please type at least {count} characters' => 'Kirjoita vähintään {count} kirjainta',
'Profile dropdown' => 'Profiilin pudotus',
'Profile image of {displayName}' => '{displayName} :n profiilikuva',
'Profile picture of {displayName}' => '{displayName} :n profiilikuva',
'Save' => 'Tallenna',
'Saved' => 'Tallennettu',
'Search' => 'Hae',
'Select Me' => 'Valitse Minut',
'Show less' => 'Näytä vähemmän',
'Show more' => 'Näytä lisää',
'Some files could not be uploaded:' => 'Joitakin tiedostoja ei voitu ladata:',
'Text could not be copied to clipboard' => 'Tekstiä ei voitu kopioida leikepöydälle',
'Text has been copied to clipboard' => 'Teksti on kopioitu leikepöydälle',
'The date has to be in the past.' => 'Päivän on oltava tätä päivää myöhemmin.',
'The file has been deleted.' => 'Tiedosto on poistettu.',
'The requested resource could not be found.' => 'Pyydettyä resurssia ei löytynyt.',
'The space has been archived.' => 'Sivu on arkistoitu.',
'The space has been unarchived.' => 'Sivu on poistettu arkistosta.',
'Time Zone' => 'Aikavyöhyke',
'Toggle comment menu' => 'Vaihda kommenttivalikko',
'Toggle panel menu' => 'Vaihda paneelin valikko',
'Toggle post menu' => 'Vaihda julkaisu valikko',
'Toggle stream entry menu' => 'Vaihda aikajana valikko',
'Unsubscribe' => 'Peruuta tilaus',
'Upload' => 'Lataa',
'Upload file' => 'Lataa tiedosto',
'You are not allowed to run this action.' => 'Et voi käyttää tätä toimintoa.',
);
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Powered by {name}' => '',
'<strong>Confirm</strong> Action' => '<strong>Vahvista</strong> Toiminto',
'<strong>Latest</strong> updates' => '<strong>Viimeismmät</strong> päivitykset',
'<strong>Mail</strong> summary' => '<strong>Ilmoitukset</strong>',
'Account settings' => 'Asetukset',
'Add:' => 'Lisää:',
'Administration' => 'Hallinta',
'Allow' => 'Salli',
'An error occurred while handling your last action. (Handler not found).' => 'Viimeisen toiminnon käsittelyssä tapahtui virhe. (Käsiteltävää ei löydy).',
'An unexpected error occurred while loading the search result.' => 'Hakutuloksen lataamisen aikana tapahtui odottamaton virhe.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Odottamaton virhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'On tapahtunut odottamaton palvelinvirhe. Jos näin tapahtuu uudelleen, ota yhteyttä sivuston ylläpitäjään.',
'An unknown error occurred while uploading.' => 'Latauksen aikana tapahtui tuntematon virhe.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Latauksen aikana tapahtui tuntematon virhe. Vihje: tarkista upload_max_filesize ja post_max_size php-asetukset.',
'Back' => 'Takaisin',
'Back to dashboard' => 'Takaisin etusivulle',
'Cancel' => 'Peruuta',
'Choose language:' => 'Valitse kieli:',
'Close' => 'Sulje',
'Collapse' => 'Sulje',
'Confirm' => 'Vahvista',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sisällön Addon-lähdekoodin on oltava HActiveRecordContent- tai HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopio leikepöydälle',
'Could not find content of addon!' => 'Laajennuksen sisältöä ei löytynyt!',
'Could not find requested page.' => 'Pyydettyä sivua ei löytynyt.',
'Default' => 'Oletus',
'Delete' => 'Poista',
'Deny' => 'Hylkää',
'Do you really want to perform this action?' => 'Haluatko todella suorittaa tämän toiminnon?',
'Edit' => 'Muokkaa',
'Error' => 'Virhe',
'Error while running your last action (Invalid request method).' => 'Virhe viimeistä toimintoa käytettäessä (virheellinen pyyntötapa).',
'Error:' => 'Virhe:',
'Expand' => 'Laajenna',
'Export' => 'Vie',
'Info:' => 'Info:',
'Invalid request method!' => 'Virheellinen pyyntötapa!',
'It looks like you may have taken the wrong turn.' => 'Näyttää siltä, että sinun ei pitäisi olla täällä.',
'Language' => 'Kieli',
'Loading...' => 'Ladataan:',
'Login' => 'Kirjaudu sisään',
'Logo of {appName}' => '{appName} :n logo',
'Logout' => 'Kirjaudu ulos',
'Menu' => 'Valikko',
'Module is not enabled on this content container!' => 'Laajennusta ei ole otettu käyttöön tällä!',
'My profile' => 'Profiili',
'My profile image' => 'Profiili kuva',
'New profile image' => 'Uusi profiili kuva',
'Next' => 'Seuraava',
'No error information given.' => 'Virheilmoituksia ei ole.',
'Oooops...' => 'Upsista...',
'Open' => 'Avaa',
'Please type at least 3 characters' => 'Kirjoita vähintään 3 kirjainta',
'Please type at least {count} characters' => 'Kirjoita vähintään {count} kirjainta',
'Profile dropdown' => 'Profiilin pudotus',
'Profile image of {displayName}' => '{displayName} :n profiilikuva',
'Profile picture of {displayName}' => '{displayName} :n profiilikuva',
'Save' => 'Tallenna',
'Saved' => 'Tallennettu',
'Search' => 'Hae',
'Select Me' => 'Valitse Minut',
'Show less' => 'Näytä vähemmän',
'Show more' => 'Näytä lisää',
'Some files could not be uploaded:' => 'Joitakin tiedostoja ei voitu ladata:',
'Text could not be copied to clipboard' => 'Tekstiä ei voitu kopioida leikepöydälle',
'Text has been copied to clipboard' => 'Teksti on kopioitu leikepöydälle',
'The date has to be in the past.' => 'Päivän on oltava tätä päivää myöhemmin.',
'The file has been deleted.' => 'Tiedosto on poistettu.',
'The requested resource could not be found.' => 'Pyydettyä resurssia ei löytynyt.',
'The space has been archived.' => 'Sivu on arkistoitu.',
'The space has been unarchived.' => 'Sivu on poistettu arkistosta.',
'Time Zone' => 'Aikavyöhyke',
'Toggle comment menu' => 'Vaihda kommenttivalikko',
'Toggle panel menu' => 'Vaihda paneelin valikko',
'Toggle post menu' => 'Vaihda julkaisu valikko',
'Toggle stream entry menu' => 'Vaihda aikajana valikko',
'Unsubscribe' => 'Peruuta tilaus',
'Upload' => 'Lataa',
'Upload file' => 'Lataa tiedosto',
'You are not allowed to run this action.' => 'Et voi käyttää tätä toimintoa.',
];

File diff suppressed because one or more lines are too long

View File

@ -1,99 +1,83 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Confirm</strong> Action' => '<strong>Confirmer</strong> l\'opération',
'<strong>Latest</strong> updates' => '<strong>Dernières</strong> mises à jour',
'<strong>Mail</strong> summary' => 'Résumé par <strong>e-mail</strong>',
'Account settings' => 'Paramètres du compte',
'Add:' => 'Ajouter :',
'Administration' => 'Administration',
'Allow' => 'Autoriser',
'An error occurred while handling your last action. (Handler not found).' => 'Une erreur s\'est produite lors de la manipulation de votre dernière action. (Gestionnaire introuvable)',
'An unexpected error occurred while loading the search result.' => 'Une erreur inattendue s\'est produite lors du chargement du résultat de la recherche.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur de serveur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unknown error occurred while uploading.' => 'Une erreur inconnue s\'est produite pendant l\'envoi de fichier.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Une erreur inconnue s\'est produite lors du chargement de fichier. Vérifiez les paramètres "php upload_max_filesize" et "post_max_size"',
'Back' => 'Retour',
'Back to dashboard' => 'Retour au fil d\'actualités',
'Cancel' => 'Annuler',
'Choose language:' => 'Choisir la langue :',
'Close' => 'Fermer',
'Collapse' => 'Réduire',
'Confirm' => 'Confirmer',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Le contenu d\'un add-on doit être une instance de HActiveRecordContent ou HActiveRecordContentAddon.',
'Copy to clipboard' => 'Copier vers le presse-papier',
'Could not find content of addon!' => 'Le contenu du add-on n\'a pu être trouvé.',
'Could not find requested page.' => 'Page non trouvée.',
'Default' => 'Défaut',
'Delete' => 'Supprimer',
'Deny' => 'Interdire',
'Do you really want to perform this action?' => 'Voulez-vous vraiment effectuer cette action ?',
'Edit' => 'Modifier',
'Error' => 'Erreur',
'Error while running your last action (Invalid request method).' => 'Erreur lors de l\'exécution de votre dernière action (méthode de demande non valide).',
'Error:' => 'Erreur :',
'Expand' => 'Agrandir',
'Export' => 'Exporter',
'Info:' => 'Info :',
'Invalid request method!' => 'Méthode de requête invalide.',
'It looks like you may have taken the wrong turn.' => 'Il semble que vous n\'êtes pas au bon endroit...',
'Language' => 'Langue',
'Loading...' => 'Chargement...',
'Login' => 'S\'identifier',
'Logo of {appName}' => 'Logo de {appName}',
'Logout' => 'Se déconnecter',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Le module n\'est pas activé pour ce conteneur.',
'My profile' => 'Mon profil',
'My profile image' => 'Mon image de profil',
'New profile image' => 'Nouvelle image de profil',
'Next' => 'Suivant',
'No error information given.' => 'Aucune information d\'erreur fournie.',
'Oooops...' => 'Oups...',
'Open' => 'Ouvrir',
'Please type at least 3 characters' => 'Merci de taper au moins 3 caractères',
'Please type at least {count} characters' => 'Veuillez saisir au moins {count} caracthères',
'Profile dropdown' => 'Liste déroulante de profil',
'Profile image of {displayName}' => 'Image de profil de {displayName}',
'Profile picture of {displayName}' => 'Photo de profil de {displayName}',
'Save' => 'Enregistrer',
'Saved' => 'Enregistré',
'Search' => 'Rechercher',
'Select Me' => 'Me choisir',
'Show less' => 'Afficher moins',
'Show more' => 'Afficher plus',
'Some files could not be uploaded:' => 'Certains fichiers n\'ont pas pu être téléchargés :',
'Text could not be copied to clipboard' => 'Le texte ne peut être copié dans le presse-papier',
'Text has been copied to clipboard' => 'Le texte a été copié dans le presse-papier',
'The date has to be in the past.' => 'La date doit être révolue.',
'The file has been deleted.' => 'Le fichier a été supprimé.',
'The requested resource could not be found.' => 'Impossible de trouver la ressource demandée.',
'The space has been archived.' => 'Cet espace à été archivé.',
'The space has been unarchived.' => 'Cet espace à été désarchivé.',
'Time Zone' => 'Fuseau horaire',
'Toggle comment menu' => 'Bascule du menu de commentaire',
'Toggle panel menu' => 'Bascule du menu du panneau',
'Toggle post menu' => 'Bascule du menu de contribution',
'Toggle stream entry menu' => 'Bascule du menu du flux d\'activité',
'Unsubscribe' => 'Gérer les résumés / Se désabonner',
'Upload' => 'Ajouter',
'Upload file' => 'Envoyer un fichier',
'You are not allowed to run this action.' => 'Vous n\'êtes pas autorisé à exécuter cette action.',
];
return array (
'<strong>Confirm</strong> Action' => '<strong>Confirmer</strong> l\'opération',
'<strong>Latest</strong> updates' => '<strong>Dernières</strong> mises à jour',
'<strong>Mail</strong> summary' => 'Résumé par <strong>e-mail</strong>',
'Account settings' => 'Paramètres du compte',
'Add:' => 'Ajouter :',
'Administration' => 'Administration',
'Allow' => 'Autoriser',
'An error occurred while handling your last action. (Handler not found).' => 'Une erreur s\'est produite lors de la manipulation de votre dernière action. (Gestionnaire introuvable)',
'An unexpected error occurred while loading the search result.' => 'Une erreur inattendue s\'est produite lors du chargement du résultat de la recherche.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Une erreur de serveur inattendue s\'est produite. Si cela se reproduit à nouveau, contactez un administrateur du site.',
'An unknown error occurred while uploading.' => 'Une erreur inconnue s\'est produite pendant l\'envoi de fichier.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Une erreur inconnue s\'est produite lors du chargement de fichier. Vérifiez les paramètres "php upload_max_filesize" et "post_max_size"',
'Back' => 'Retour',
'Back to dashboard' => 'Retour au fil d\'actualités',
'Cancel' => 'Annuler',
'Choose language:' => 'Choisir la langue :',
'Close' => 'Fermer',
'Collapse' => 'Réduire',
'Confirm' => 'Confirmer',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Le contenu d\'un add-on doit être une instance de HActiveRecordContent ou HActiveRecordContentAddon.',
'Copy to clipboard' => 'Copier vers le presse-papier',
'Could not find content of addon!' => 'Le contenu du add-on n\'a pu être trouvé.',
'Could not find requested page.' => 'Page non trouvée.',
'Default' => 'Défaut',
'Delete' => 'Supprimer',
'Deny' => 'Interdire',
'Do you really want to perform this action?' => 'Voulez-vous vraiment effectuer cette action ?',
'Edit' => 'Modifier',
'Error' => 'Erreur',
'Error while running your last action (Invalid request method).' => 'Erreur lors de l\'exécution de votre dernière action (méthode de demande non valide).',
'Error:' => 'Erreur :',
'Expand' => 'Agrandir',
'Export' => 'Exporter',
'Info:' => 'Info :',
'Invalid request method!' => 'Méthode de requête invalide.',
'It looks like you may have taken the wrong turn.' => 'Il semble que vous n\'êtes pas au bon endroit...',
'Language' => 'Langue',
'Loading...' => 'Chargement...',
'Login' => 'S\'identifier',
'Logo of {appName}' => 'Logo de {appName}',
'Logout' => 'Se déconnecter',
'Menu' => 'Menu',
'Module is not enabled on this content container!' => 'Le module n\'est pas activé pour ce conteneur.',
'My profile' => 'Mon profil',
'My profile image' => 'Mon image de profil',
'New profile image' => 'Nouvelle image de profil',
'Next' => 'Suivant',
'No error information given.' => 'Aucune information d\'erreur fournie.',
'Oooops...' => 'Oups...',
'Open' => 'Ouvrir',
'Please type at least 3 characters' => 'Merci de taper au moins 3 caractères',
'Please type at least {count} characters' => 'Veuillez saisir au moins {count} caracthères',
'Powered by {name}' => 'Propulsé par {name}',
'Profile dropdown' => 'Liste déroulante de profil',
'Profile image of {displayName}' => 'Image de profil de {displayName}',
'Profile picture of {displayName}' => 'Photo de profil de {displayName}',
'Save' => 'Enregistrer',
'Saved' => 'Enregistré',
'Search' => 'Rechercher',
'Select Me' => 'Me choisir',
'Show less' => 'Afficher moins',
'Show more' => 'Afficher plus',
'Some files could not be uploaded:' => 'Certains fichiers n\'ont pas pu être téléchargés :',
'Text could not be copied to clipboard' => 'Le texte ne peut être copié dans le presse-papier',
'Text has been copied to clipboard' => 'Le texte a été copié dans le presse-papier',
'The date has to be in the past.' => 'La date doit être révolue.',
'The file has been deleted.' => 'Le fichier a été supprimé.',
'The requested resource could not be found.' => 'Impossible de trouver la ressource demandée.',
'The space has been archived.' => 'Cet espace à été archivé.',
'The space has been unarchived.' => 'Cet espace à été désarchivé.',
'Time Zone' => 'Fuseau horaire',
'Toggle comment menu' => 'Bascule du menu de commentaire',
'Toggle panel menu' => 'Bascule du menu du panneau',
'Toggle post menu' => 'Bascule du menu de contribution',
'Toggle stream entry menu' => 'Bascule du menu du flux d\'activité',
'Unsubscribe' => 'Gérer les résumés / Se désabonner',
'Upload' => 'Ajouter',
'Upload file' => 'Envoyer un fichier',
'You are not allowed to run this action.' => 'Vous n\'êtes pas autorisé à exécuter cette action.',
);

File diff suppressed because one or more lines are too long

View File

@ -1,99 +1,83 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Add:' => '',
'Could not find requested page.' => '',
'Delete' => '',
'Edit' => '',
'Please type at least {count} characters' => '',
'<strong>Confirm</strong> Action' => '<strong>Potvrdi</strong> akciju',
'<strong>Latest</strong> updates' => '<strong>Zadnje</strong> ažuriranje',
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sažetak',
'Account settings' => 'Postavke računa',
'Administration' => 'Administracija',
'Allow' => 'Dopusti',
'An error occurred while handling your last action. (Handler not found).' => 'Došlo je do pogreške pri rukovanju vašom posljednjom radnjom. (Handler nije pronađen).',
'An unexpected error occurred while loading the search result.' => 'Došlo je do neočekivane pogreške prilikom učitavanja rezultata pretraživanja.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške poslužitelja. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unknown error occurred while uploading.' => 'Došlo je do nepoznate pogreške prilikom prijenosa.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Došlo je do nepoznate pogreške prilikom prijenosa. Savjet: provjerite postavke php postavki upload_max_filesize i post_max_size.',
'Back' => 'Povratak',
'Back to dashboard' => 'Povratak na upravljačku ploču',
'Cancel' => 'Poništi',
'Choose language:' => 'Odaberite jezik:',
'Close' => 'Zatvori',
'Collapse' => 'Spusti',
'Confirm' => 'Potvrdi',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Izvor sadržaja Addon mora biti primjerak HActiveRecordContent ili HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopirati u međuspremnik',
'Could not find content of addon!' => 'Nije moguće pronaći sadržaj addona!',
'Default' => 'Zadano',
'Deny' => 'Odbiti',
'Do you really want to perform this action?' => 'Želite li zaista uraditi ovu akciju?',
'Error' => 'Error',
'Error while running your last action (Invalid request method).' => 'Pogreška prilikom izvođenja zadnje radnje (nevažeći način zahtjeva).',
'Error:' => 'Error:',
'Expand' => 'Proširi',
'Export' => 'Izvoz',
'Info:' => 'Info:',
'Invalid request method!' => 'Nevažeći način zahtjeva!',
'It looks like you may have taken the wrong turn.' => 'Izgleda da ste se pogrešno skrenuli.',
'Language' => 'Jezik',
'Loading...' => 'Učitavam...',
'Login' => 'Prijava',
'Logo of {appName}' => 'Logo {appName}',
'Logout' => 'Odjava',
'Menu' => 'Izbornik',
'Module is not enabled on this content container!' => 'Modul nije omogućen na ovom spremniku sadržaja!',
'My profile' => 'Moj profil',
'My profile image' => 'Moja profilna slika',
'New profile image' => 'Nova profilna slika',
'Next' => 'Dalje',
'No error information given.' => 'Nema podataka o pogrešci.',
'Oooops...' => 'Oooops...',
'Open' => 'Otvori',
'Please type at least 3 characters' => 'Upišite najmanje 3 znaka',
'Profile dropdown' => 'Padajući izbornik profila',
'Profile image of {displayName}' => 'Profilna slika od {displayName}',
'Profile picture of {displayName}' => 'Profilna slika od {displayName}',
'Save' => 'Spremi',
'Saved' => 'Spremljeno',
'Search' => 'Pretraži',
'Select Me' => 'Izaberi mene',
'Show less' => 'Prikaži manje',
'Show more' => 'Prikaži više',
'Some files could not be uploaded:' => 'Neke datoteke nisu prenesene:',
'Text could not be copied to clipboard' => 'Tekst nije mogao biti kopiran u privremenu memoriju',
'Text has been copied to clipboard' => 'Tekst je kopiran u privremenu memoriju',
'The date has to be in the past.' => 'Datum mora biti u prošlosti.',
'The file has been deleted.' => 'Datoteka je izbrisana.',
'The requested resource could not be found.' => 'Traženi resurs nije moguće pronaći.',
'The space has been archived.' => 'Prostor je arhiviran.',
'The space has been unarchived.' => 'Prostor je od-arhiviran.',
'Time Zone' => 'Vremenska zona',
'Toggle comment menu' => 'Prebacivanje izbornika komentara',
'Toggle panel menu' => 'Prebacivanje izbornika na ploči',
'Toggle post menu' => 'Prelazak na izbornik posta',
'Toggle stream entry menu' => 'Prebacivanje izbornika unosa u stream',
'Unsubscribe' => 'Otkažite pretplatu',
'Upload' => 'Dodaj',
'Upload file' => 'Dodaj datoteku',
'You are not allowed to run this action.' => 'Nije vam dozvoljena ova akcija.',
];
return array (
'<strong>Confirm</strong> Action' => '<strong>Potvrdi</strong> akciju',
'<strong>Latest</strong> updates' => '<strong>Zadnje</strong> ažuriranje',
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sažetak',
'Account settings' => 'Postavke računa',
'Add:' => 'Dodaj:',
'Administration' => 'Administracija',
'Allow' => 'Dopusti',
'An error occurred while handling your last action. (Handler not found).' => 'Došlo je do pogreške pri rukovanju vašom posljednjom radnjom. (Handler nije pronađen).',
'An unexpected error occurred while loading the search result.' => 'Došlo je do neočekivane pogreške prilikom učitavanja rezultata pretraživanja.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Došlo je do neočekivane pogreške poslužitelja. Ako se to nastavi, kontaktirajte administratora web mjesta.',
'An unknown error occurred while uploading.' => 'Došlo je do nepoznate pogreške prilikom prijenosa.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Došlo je do nepoznate pogreške prilikom prijenosa. Savjet: provjerite postavke php postavki upload_max_filesize i post_max_size.',
'Back' => 'Povratak',
'Back to dashboard' => 'Povratak na upravljačku ploču',
'Cancel' => 'Poništi',
'Choose language:' => 'Odaberite jezik:',
'Close' => 'Zatvori',
'Collapse' => 'Spusti',
'Confirm' => 'Potvrdi',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Izvor sadržaja Addon mora biti primjerak HActiveRecordContent ili HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopirati u međuspremnik',
'Could not find content of addon!' => 'Nije moguće pronaći sadržaj addona!',
'Could not find requested page.' => 'Nike moguće pronaći traženu stranicu.',
'Default' => 'Zadano',
'Delete' => 'Izbriši',
'Deny' => 'Odbiti',
'Do you really want to perform this action?' => 'Želite li zaista uraditi ovu akciju?',
'Edit' => 'Uredi',
'Error' => 'Error',
'Error while running your last action (Invalid request method).' => 'Pogreška prilikom izvođenja zadnje radnje (nevažeći način zahtjeva).',
'Error:' => 'Error:',
'Expand' => 'Proširi',
'Export' => 'Izvoz',
'Info:' => 'Info:',
'Invalid request method!' => 'Nevažeći način zahtjeva!',
'It looks like you may have taken the wrong turn.' => 'Izgleda da ste se pogrešno skrenuli.',
'Language' => 'Jezik',
'Loading...' => 'Učitavam...',
'Login' => 'Prijava',
'Logo of {appName}' => 'Logo {appName}',
'Logout' => 'Odjava',
'Menu' => 'Izbornik',
'Module is not enabled on this content container!' => 'Modul nije omogućen na ovom spremniku sadržaja!',
'My profile' => 'Moj profil',
'My profile image' => 'Moja profilna slika',
'New profile image' => 'Nova profilna slika',
'Next' => 'Dalje',
'No error information given.' => 'Nema podataka o pogrešci.',
'Oooops...' => 'Oooops...',
'Open' => 'Otvori',
'Please type at least 3 characters' => 'Upišite najmanje 3 znaka',
'Please type at least {count} characters' => 'Molimo unesite najmanje {count} znakova',
'Powered by {name}' => 'Pokreće {name}',
'Profile dropdown' => 'Padajući izbornik profila',
'Profile image of {displayName}' => 'Profilna slika od {displayName}',
'Profile picture of {displayName}' => 'Profilna slika od {displayName}',
'Save' => 'Spremi',
'Saved' => 'Spremljeno',
'Search' => 'Pretraži',
'Select Me' => 'Izaberi mene',
'Show less' => 'Prikaži manje',
'Show more' => 'Prikaži više',
'Some files could not be uploaded:' => 'Neke datoteke nisu prenesene:',
'Text could not be copied to clipboard' => 'Tekst nije mogao biti kopiran u privremenu memoriju',
'Text has been copied to clipboard' => 'Tekst je kopiran u privremenu memoriju',
'The date has to be in the past.' => 'Datum mora biti u prošlosti.',
'The file has been deleted.' => 'Datoteka je izbrisana.',
'The requested resource could not be found.' => 'Traženi resurs nije moguće pronaći.',
'The space has been archived.' => 'Prostor je arhiviran.',
'The space has been unarchived.' => 'Prostor je od-arhiviran.',
'Time Zone' => 'Vremenska zona',
'Toggle comment menu' => 'Prebacivanje izbornika komentara',
'Toggle panel menu' => 'Prebacivanje izbornika na ploči',
'Toggle post menu' => 'Prelazak na izbornik posta',
'Toggle stream entry menu' => 'Prebacivanje izbornika unosa u stream',
'Unsubscribe' => 'Otkažite pretplatu',
'Upload' => 'Dodaj',
'Upload file' => 'Dodaj datoteku',
'You are not allowed to run this action.' => 'Nije vam dozvoljena ova akcija.',
);

View File

@ -44,6 +44,7 @@ return [
'No error information given.' => '',
'Open' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -1,83 +1,101 @@
<?php
return array (
'<strong>Confirm</strong> Action' => 'Művelet<strong>megerősítése</strong>',
'<strong>Latest</strong> updates' => '<strong>Legújabb</strong> frissítések',
'<strong>Mail</strong> summary' => '<strong>Üzenetek</strong> összesítő',
'Account settings' => 'Fiók beállítások',
'Add:' => 'Hozzáadás:',
'Administration' => 'Adminisztráció',
'Allow' => 'Engedélyezés',
'An error occurred while handling your last action. (Handler not found).' => 'Egy hiba merült fel a legutóbbi művelet elvégzésekor. (Handler nem található)',
'An unexpected error occurred while loading the search result.' => 'Váratlan hiba merült fel a keresés eredményeinek betöltése közben.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan hiba merült fel. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan szerverhiba történt. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
'An unknown error occurred while uploading.' => 'Ismeretlen hiba történt feltöltés közben.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Hiba történt a feltöltés közben, lehetséges, hogy túl nagy a fájlméret! Tipp: ellenőrizd a upload_max_filesize és a post_max_size php beállításokat.',
'Back' => 'Vissza',
'Back to dashboard' => 'Vissza az áttekintéshez',
'Cancel' => 'Mégsem',
'Choose language:' => 'Válassz nyelvet:',
'Close' => 'Bezár',
'Collapse' => 'Összecsukás',
'Confirm' => 'Rendben',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'A tartalom bővítmény forrásának HActiveRecordContent vagy HActiveRecordContentAddon példánynak kell lennie!',
'Copy to clipboard' => 'Másolás vágólapra',
'Could not find content of addon!' => 'Nem található a bővítmény tartalma!',
'Could not find requested page.' => 'Nem található a kért oldal!',
'Default' => 'Alapértelmezett',
'Delete' => 'Törlés',
'Deny' => 'Tiltás',
'Do you really want to perform this action?' => 'Biztos, hogy végrehajtod a műveletet?',
'Edit' => 'Szerkesztés',
'Error' => 'Hiba',
'Error while running your last action (Invalid request method).' => 'Hiba történt a művelet közben.
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Powered by {name}' => '',
'<strong>Confirm</strong> Action' => 'Művelet<strong>megerősítése</strong>',
'<strong>Latest</strong> updates' => '<strong>Legújabb</strong> frissítések',
'<strong>Mail</strong> summary' => '<strong>Üzenetek</strong> összesítő',
'Account settings' => 'Fiók beállítások',
'Add:' => 'Hozzáadás:',
'Administration' => 'Adminisztráció',
'Allow' => 'Engedélyezés',
'An error occurred while handling your last action. (Handler not found).' => 'Egy hiba merült fel a legutóbbi művelet elvégzésekor. (Handler nem található)',
'An unexpected error occurred while loading the search result.' => 'Váratlan hiba merült fel a keresés eredményeinek betöltése közben.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan hiba merült fel. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Váratlan szerverhiba történt. Ha továbbra is hiba lépne fel, keresd az oldal egyik adminisztrátorát.',
'An unknown error occurred while uploading.' => 'Ismeretlen hiba történt feltöltés közben.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Hiba történt a feltöltés közben, lehetséges, hogy túl nagy a fájlméret! Tipp: ellenőrizd a upload_max_filesize és a post_max_size php beállításokat.',
'Back' => 'Vissza',
'Back to dashboard' => 'Vissza az áttekintéshez',
'Cancel' => 'Mégsem',
'Choose language:' => 'Válassz nyelvet:',
'Close' => 'Bezár',
'Collapse' => 'Összecsukás',
'Confirm' => 'Rendben',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'A tartalom bővítmény forrásának HActiveRecordContent vagy HActiveRecordContentAddon példánynak kell lennie!',
'Copy to clipboard' => 'Másolás vágólapra',
'Could not find content of addon!' => 'Nem található a bővítmény tartalma!',
'Could not find requested page.' => 'Nem található a kért oldal!',
'Default' => 'Alapértelmezett',
'Delete' => 'Törlés',
'Deny' => 'Tiltás',
'Do you really want to perform this action?' => 'Biztos, hogy végrehajtod a műveletet?',
'Edit' => 'Szerkesztés',
'Error' => 'Hiba',
'Error while running your last action (Invalid request method).' => 'Hiba történt a művelet közben.
(Érvénytelen kérelem)',
'Error:' => 'Hiba:',
'Expand' => 'Kinyit',
'Export' => 'Exportálás',
'Info:' => 'Információ:',
'Invalid request method!' => 'Érvénytelen kérelem!',
'It looks like you may have taken the wrong turn.' => 'Hoppá... Valami hiba történt.',
'Language' => 'Nyelv:',
'Loading...' => 'Betöltés...',
'Login' => 'Bejelentkezés',
'Logo of {appName}' => '{appName} logója',
'Logout' => 'Kijelentkezés',
'Menu' => 'Menü',
'Module is not enabled on this content container!' => 'A modul nincs engedélyezve a tartalom tárolójában.',
'My profile' => 'Profilom',
'My profile image' => 'Profilképem',
'New profile image' => 'Új profilkép',
'Next' => 'Következő',
'No error information given.' => 'Nincs hibainformáció.',
'Oooops...' => 'Hoppá...',
'Open' => 'Megnyitás',
'Please type at least 3 characters' => 'Gépelj be legalább 3 karaktert',
'Please type at least {count} characters' => 'Legalább adj meg {count} karaktert',
'Profile dropdown' => 'Profil legördülő menü',
'Profile image of {displayName}' => '{displayName} profilképe',
'Profile picture of {displayName}' => '{displayName} profilképe',
'Save' => 'Mentés',
'Saved' => 'Mentve',
'Search' => 'Keresés',
'Select Me' => 'Válassz ki',
'Show less' => 'Kevesebb mutatása',
'Show more' => 'Több mutatása',
'Some files could not be uploaded:' => 'Néhány fájlt nem sikerült feltölteni:',
'Text could not be copied to clipboard' => 'A szöveget nem sikerült a vágólapra másolni',
'Text has been copied to clipboard' => 'A szöveg a vágolapra másolva',
'The date has to be in the past.' => 'A dátumnak a múltban kell lennie.',
'The file has been deleted.' => 'A fájlt törölve lett.',
'The requested resource could not be found.' => 'A kért tartalom nem található.',
'The space has been archived.' => 'A közösség archiválásra került.',
'The space has been unarchived.' => 'Közösség archiválása megszüntetve.',
'Time Zone' => 'Időzóna',
'Toggle comment menu' => 'Hozzászólások menü ki-bekapcsolása',
'Toggle panel menu' => 'Panel menü ki-bekapcsolása',
'Toggle post menu' => 'Bejegyzések menü ki-bekapcsolása',
'Toggle stream entry menu' => 'A folyam menü ki-bekapcsolása',
'Unsubscribe' => 'Leiratkozás',
'Upload' => 'Feltöltés',
'Upload file' => 'Fájl feltöltése',
'You are not allowed to run this action.' => 'Nincs engedélyed, hogy ezt a műveletet végrehajsd.',
);
'Error:' => 'Hiba:',
'Expand' => 'Kinyit',
'Export' => 'Exportálás',
'Info:' => 'Információ:',
'Invalid request method!' => 'Érvénytelen kérelem!',
'It looks like you may have taken the wrong turn.' => 'Hoppá... Valami hiba történt.',
'Language' => 'Nyelv:',
'Loading...' => 'Betöltés...',
'Login' => 'Bejelentkezés',
'Logo of {appName}' => '{appName} logója',
'Logout' => 'Kijelentkezés',
'Menu' => 'Menü',
'Module is not enabled on this content container!' => 'A modul nincs engedélyezve a tartalom tárolójában.',
'My profile' => 'Profilom',
'My profile image' => 'Profilképem',
'New profile image' => 'Új profilkép',
'Next' => 'Következő',
'No error information given.' => 'Nincs hibainformáció.',
'Oooops...' => 'Hoppá...',
'Open' => 'Megnyitás',
'Please type at least 3 characters' => 'Gépelj be legalább 3 karaktert',
'Please type at least {count} characters' => 'Legalább adj meg {count} karaktert',
'Profile dropdown' => 'Profil legördülő menü',
'Profile image of {displayName}' => '{displayName} profilképe',
'Profile picture of {displayName}' => '{displayName} profilképe',
'Save' => 'Mentés',
'Saved' => 'Mentve',
'Search' => 'Keresés',
'Select Me' => 'Válassz ki',
'Show less' => 'Kevesebb mutatása',
'Show more' => 'Több mutatása',
'Some files could not be uploaded:' => 'Néhány fájlt nem sikerült feltölteni:',
'Text could not be copied to clipboard' => 'A szöveget nem sikerült a vágólapra másolni',
'Text has been copied to clipboard' => 'A szöveg a vágolapra másolva',
'The date has to be in the past.' => 'A dátumnak a múltban kell lennie.',
'The file has been deleted.' => 'A fájlt törölve lett.',
'The requested resource could not be found.' => 'A kért tartalom nem található.',
'The space has been archived.' => 'A közösség archiválásra került.',
'The space has been unarchived.' => 'Közösség archiválása megszüntetve.',
'Time Zone' => 'Időzóna',
'Toggle comment menu' => 'Hozzászólások menü ki-bekapcsolása',
'Toggle panel menu' => 'Panel menü ki-bekapcsolása',
'Toggle post menu' => 'Bejegyzések menü ki-bekapcsolása',
'Toggle stream entry menu' => 'A folyam menü ki-bekapcsolása',
'Unsubscribe' => 'Leiratkozás',
'Upload' => 'Feltöltés',
'Upload file' => 'Fájl feltöltése',
'You are not allowed to run this action.' => 'Nincs engedélyed, hogy ezt a műveletet végrehajsd.',
];

View File

@ -48,6 +48,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

File diff suppressed because one or more lines are too long

View File

@ -53,6 +53,7 @@ return array (
'Open' => 'Apri',
'Please type at least 3 characters' => 'Prova a digitare almeno 3 caratteri',
'Please type at least {count} characters' => 'Digita almeno {count} caratteri',
'Powered by {name}' => 'Fornito da {name}',
'Profile dropdown' => 'Menu del profilo',
'Profile image of {displayName}' => 'Immagine del profilo di {displayName}',
'Profile picture of {displayName}' => 'Immagine del profilo di {displayName}',
@ -68,7 +69,7 @@ return array (
'The date has to be in the past.' => 'La data deve essere nel passato.',
'The file has been deleted.' => 'Il file è stato cancellato.',
'The requested resource could not be found.' => 'La risorsa richiesta non è stata trovata.',
'The space has been archived.' => 'Lo spazio è stato archiviato. ',
'The space has been archived.' => 'Lo spazio è stato archiviato.',
'The space has been unarchived.' => 'Lo spazio è stato ripristinato.',
'Time Zone' => 'Fuso orario',
'Toggle comment menu' => 'Attiva menu Commento',

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,8 @@
<?php
return array (
'<strong>Confirm</strong> Action' => '<strong>確認</ strong> アクション',
'<strong>Confirm</strong> Action' => '<strong>確認 strong&gt; アクション</strong>',
'<strong>Latest</strong> updates' => '<strong>最新</strong> 更新',
'<strong>Mail</strong> summary' => '<strong>メール</ strong> の概要',
'<strong>Mail</strong> summary' => '<strong>メール strong&gt; の概要</strong>',
'Account settings' => 'アカウント設定',
'Add:' => '追加:',
'Administration' => '管理',
@ -53,6 +53,7 @@ return array (
'Open' => '開く',
'Please type at least 3 characters' => '3 文字以上を入力してください',
'Please type at least {count} characters' => '少なくとも {count} 文字が必要です',
'Powered by {name}' => '{name}によって供給',
'Profile dropdown' => 'ドロップダウンプロフィール',
'Profile image of {displayName}' => 'のプロフィール画像{displayName}',
'Profile picture of {displayName}' => 'のプロフィール写真{displayName}',

View File

@ -49,6 +49,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -48,6 +48,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -24,6 +24,7 @@ return [
'Export' => '',
'Invalid request method!' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Select Me' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',

File diff suppressed because one or more lines are too long

View File

@ -1,82 +1,100 @@
<?php
return array (
'<strong>Confirm</strong> Action' => '<strong>Bekreft</strong> handling',
'<strong>Latest</strong> updates' => '<strong>Siste</strong> oppdateringer',
'<strong>Mail</strong> summary' => '<strong>E-post</strong> sammendrag',
'Account settings' => 'Innstillinger',
'Add:' => 'Legg til:',
'Administration' => 'Administrasjon',
'Allow' => 'Tillat',
'An error occurred while handling your last action. (Handler not found).' => 'En feil oppstod (Handler not found).',
'An unexpected error occurred while loading the search result.' => 'En uventet feil oppstod ved lasting av søkeresultat.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'En uventet feil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'En serverfeil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
'An unknown error occurred while uploading.' => 'En ukjent feil oppstod under opplasting.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'En ukjent feil oppstod under opplasting. Hing: sjekk upload_max_filesize og post_max_size i PHP-innstillingene.',
'Back' => 'Tilbake',
'Back to dashboard' => 'Tilbake til oversikten',
'Cancel' => 'Avbryt',
'Choose language:' => 'Velg Språk',
'Close' => 'Lukk',
'Collapse' => 'Trekk sammen',
'Confirm' => 'Bekreft',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Innhold Addon kilden må være forekomst av HActiveRecordContent eller HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopier til utklippstavle',
'Could not find content of addon!' => 'Kunne ikke finne innhold i tillegg!',
'Could not find requested page.' => 'Fant ikke forespurt side.',
'Default' => 'Standard',
'Delete' => 'Slett',
'Deny' => 'Avvis',
'Do you really want to perform this action?' => 'Vil du virkelig utføre denne handlingen?',
'Edit' => 'Rediger',
'Error' => 'Feil',
'Error while running your last action (Invalid request method).' => 'Feil under forrige handling (Invalid request method).',
'Error:' => 'Feil:',
'Expand' => 'Utvid',
'Export' => 'Eksporter',
'Info:' => 'Info:',
'Invalid request method!' => 'Ugyldig forespørselsmetode',
'It looks like you may have taken the wrong turn.' => 'Her ble det krøll.',
'Language' => 'Språk',
'Loading...' => 'Laster...',
'Login' => 'Logg inn',
'Logo of {appName}' => 'Logo for {appName}',
'Logout' => 'Logg ut',
'Menu' => 'Meny',
'Module is not enabled on this content container!' => 'Modulen er ikke aktivert for dette innholdet',
'My profile' => 'Min profil',
'My profile image' => 'Mitt profil bilde',
'New profile image' => 'Nytt profilbilde',
'Next' => 'Neste',
'No error information given.' => 'Ingen feilinformasjon angitt.',
'Oooops...' => 'Oooops...',
'Open' => 'Åpne',
'Please type at least 3 characters' => 'Tast inn minimum 3 tegn',
'Please type at least {count} characters' => 'Venligst tast inn minst {count} karakterer',
'Profile dropdown' => 'Profil nedtreksmeny',
'Profile image of {displayName}' => 'Profil bilde for {displayName}',
'Profile picture of {displayName}' => 'Profil bilde for {displayName}',
'Save' => 'Lagre',
'Saved' => 'Lagret',
'Search' => 'Søk',
'Select Me' => 'Velg meg',
'Show less' => 'Vis mindre',
'Show more' => 'Vis mer',
'Some files could not be uploaded:' => 'Noen filer kunne ikke lastes opp:',
'Text could not be copied to clipboard' => 'Teksten kunne ikke kopieres til utklipstavlen',
'Text has been copied to clipboard' => 'Teksten har blitt kopiert til utklipstavlen',
'The date has to be in the past.' => 'Datoen må være i fortid.',
'The file has been deleted.' => 'Filen er slettet.',
'The requested resource could not be found.' => 'Forespurt ressurs ble ikke fnnet.',
'The space has been archived.' => 'Gruppen er blitt arkivert.',
'The space has been unarchived.' => 'Gruppen er hentet tilbake fra arkiv.',
'Time Zone' => 'Tidssone',
'Toggle comment menu' => 'Bytt kommentarmeny',
'Toggle panel menu' => 'Bytt panelmeny',
'Toggle post menu' => 'Bytt postmeny',
'Toggle stream entry menu' => 'Veksle strømmenyen',
'Unsubscribe' => 'Avslutte abonnementet',
'Upload' => 'Last opp',
'Upload file' => 'Last opp fil',
'You are not allowed to run this action.' => 'Du har ikke tillatelse til å utføre denne handlingen.',
);
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Powered by {name}' => '',
'<strong>Confirm</strong> Action' => '<strong>Bekreft</strong> handling',
'<strong>Latest</strong> updates' => '<strong>Siste</strong> oppdateringer',
'<strong>Mail</strong> summary' => '<strong>E-post</strong> sammendrag',
'Account settings' => 'Innstillinger',
'Add:' => 'Legg til:',
'Administration' => 'Administrasjon',
'Allow' => 'Tillat',
'An error occurred while handling your last action. (Handler not found).' => 'En feil oppstod (Handler not found).',
'An unexpected error occurred while loading the search result.' => 'En uventet feil oppstod ved lasting av søkeresultat.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'En uventet feil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'En serverfeil oppstod. Hvis dette fortsetter å skje, ta kontakt med din administrator.',
'An unknown error occurred while uploading.' => 'En ukjent feil oppstod under opplasting.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'En ukjent feil oppstod under opplasting. Hing: sjekk upload_max_filesize og post_max_size i PHP-innstillingene.',
'Back' => 'Tilbake',
'Back to dashboard' => 'Tilbake til oversikten',
'Cancel' => 'Avbryt',
'Choose language:' => 'Velg Språk',
'Close' => 'Lukk',
'Collapse' => 'Trekk sammen',
'Confirm' => 'Bekreft',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Innhold Addon kilden må være forekomst av HActiveRecordContent eller HActiveRecordContentAddon!',
'Copy to clipboard' => 'Kopier til utklippstavle',
'Could not find content of addon!' => 'Kunne ikke finne innhold i tillegg!',
'Could not find requested page.' => 'Fant ikke forespurt side.',
'Default' => 'Standard',
'Delete' => 'Slett',
'Deny' => 'Avvis',
'Do you really want to perform this action?' => 'Vil du virkelig utføre denne handlingen?',
'Edit' => 'Rediger',
'Error' => 'Feil',
'Error while running your last action (Invalid request method).' => 'Feil under forrige handling (Invalid request method).',
'Error:' => 'Feil:',
'Expand' => 'Utvid',
'Export' => 'Eksporter',
'Info:' => 'Info:',
'Invalid request method!' => 'Ugyldig forespørselsmetode',
'It looks like you may have taken the wrong turn.' => 'Her ble det krøll.',
'Language' => 'Språk',
'Loading...' => 'Laster...',
'Login' => 'Logg inn',
'Logo of {appName}' => 'Logo for {appName}',
'Logout' => 'Logg ut',
'Menu' => 'Meny',
'Module is not enabled on this content container!' => 'Modulen er ikke aktivert for dette innholdet',
'My profile' => 'Min profil',
'My profile image' => 'Mitt profil bilde',
'New profile image' => 'Nytt profilbilde',
'Next' => 'Neste',
'No error information given.' => 'Ingen feilinformasjon angitt.',
'Oooops...' => 'Oooops...',
'Open' => 'Åpne',
'Please type at least 3 characters' => 'Tast inn minimum 3 tegn',
'Please type at least {count} characters' => 'Venligst tast inn minst {count} karakterer',
'Profile dropdown' => 'Profil nedtreksmeny',
'Profile image of {displayName}' => 'Profil bilde for {displayName}',
'Profile picture of {displayName}' => 'Profil bilde for {displayName}',
'Save' => 'Lagre',
'Saved' => 'Lagret',
'Search' => 'Søk',
'Select Me' => 'Velg meg',
'Show less' => 'Vis mindre',
'Show more' => 'Vis mer',
'Some files could not be uploaded:' => 'Noen filer kunne ikke lastes opp:',
'Text could not be copied to clipboard' => 'Teksten kunne ikke kopieres til utklipstavlen',
'Text has been copied to clipboard' => 'Teksten har blitt kopiert til utklipstavlen',
'The date has to be in the past.' => 'Datoen må være i fortid.',
'The file has been deleted.' => 'Filen er slettet.',
'The requested resource could not be found.' => 'Forespurt ressurs ble ikke fnnet.',
'The space has been archived.' => 'Gruppen er blitt arkivert.',
'The space has been unarchived.' => 'Gruppen er hentet tilbake fra arkiv.',
'Time Zone' => 'Tidssone',
'Toggle comment menu' => 'Bytt kommentarmeny',
'Toggle panel menu' => 'Bytt panelmeny',
'Toggle post menu' => 'Bytt postmeny',
'Toggle stream entry menu' => 'Veksle strømmenyen',
'Unsubscribe' => 'Avslutte abonnementet',
'Upload' => 'Last opp',
'Upload file' => 'Last opp fil',
'You are not allowed to run this action.' => 'Du har ikke tillatelse til å utføre denne handlingen.',
];

File diff suppressed because one or more lines are too long

View File

@ -53,6 +53,7 @@ return array (
'Open' => 'Open',
'Please type at least 3 characters' => 'Typ tenminste 3 tekens',
'Please type at least {count} characters' => 'Typ ten minste {count} tekens',
'Powered by {name}' => 'Mogelijk gemaakt door {name}',
'Profile dropdown' => 'Profiel keuzelijst',
'Profile image of {displayName}' => 'Profielafbeelding van {displayName}',
'Profile picture of {displayName}' => 'Profielafbeelding van {displayName}',

View File

@ -70,6 +70,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

File diff suppressed because one or more lines are too long

View File

@ -35,7 +35,7 @@ return array (
'Expand' => 'Rozwiń',
'Export' => 'Eksportuj',
'Info:' => 'Info:',
'Invalid request method!' => '',
'Invalid request method!' => 'Błędna metoda żądania!',
'It looks like you may have taken the wrong turn.' => 'Chyba zabłądziłeś.',
'Language' => 'Język',
'Loading...' => 'Ładowanie...',
@ -53,13 +53,14 @@ return array (
'Open' => 'Otwórz',
'Please type at least 3 characters' => 'Wpisz przynajmniej 3 znaki',
'Please type at least {count} characters' => 'Wpisz przynajmniej {count} litery',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Powered by {name}' => 'Od {name}',
'Profile dropdown' => 'Rozwiń Profil',
'Profile image of {displayName}' => 'Obraz profilowy {displayName}',
'Profile picture of {displayName}' => 'Zdjęcie profilowe {displayName}',
'Save' => 'Zapisz',
'Saved' => 'Zapisano',
'Search' => 'Szukaj',
'Select Me' => '',
'Select Me' => 'Wybierz mnie',
'Show less' => 'Pokaż mniej',
'Show more' => 'Pokaż więcej',
'Some files could not be uploaded:' => 'Niektóre pliki nie mogą zostać przesłane:',
@ -72,9 +73,9 @@ return array (
'The space has been unarchived.' => 'Strefa ma zostać rozpakowana.',
'Time Zone' => 'Strefa czasowa',
'Toggle comment menu' => 'Przełącz menu komentarzy',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'Toggle panel menu' => 'Przełącz menu panela',
'Toggle post menu' => 'Przełącz menu wpisów',
'Toggle stream entry menu' => 'Przełącz menu wpisu źródła',
'Unsubscribe' => 'Anuluj subskrybcję',
'Upload' => 'Prześlij',
'Upload file' => 'Prześlij plik',

View File

@ -53,6 +53,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -17,6 +17,7 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Powered by {name}' => '',
'<strong>Confirm</strong> Action' => '<strong>Confirmar</strong> Ação',
'<strong>Latest</strong> updates' => '<strong>Últimas</strong> atualizações',
'<strong>Mail</strong> summary' => 'Resume de <strong>E-mail</strong>',

View File

@ -1,82 +1,100 @@
<?php
return array (
'<strong>Confirm</strong> Action' => '',
'<strong>Latest</strong> updates' => '<strong>Ultimele</strong> actualizări',
'<strong>Mail</strong> summary' => '',
'Account settings' => 'Setări de Cont',
'Add:' => 'Adauga',
'Administration' => 'Administrație',
'Allow' => 'Permite',
'An error occurred while handling your last action. (Handler not found).' => '',
'An unexpected error occurred while loading the search result.' => '',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unknown error occurred while uploading.' => '',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
'Back' => 'Înapoi',
'Back to dashboard' => 'Înapoi la panoul de control',
'Cancel' => 'Anulează',
'Choose language:' => 'Alege limba:',
'Close' => 'Închide',
'Collapse' => 'Strânge',
'Confirm' => '',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sursa Conținutului de Adaos trebuie să fie instanță a HActiveRecordContent sau a HActiveRecordContentAddon!',
'Copy to clipboard' => '',
'Could not find content of addon!' => 'Nu s-a putut găsi conținutul adaosului!',
'Could not find requested page.' => '',
'Default' => '',
'Delete' => 'Sterge',
'Deny' => '',
'Do you really want to perform this action?' => '',
'Edit' => '',
'Error' => 'Eroare',
'Error while running your last action (Invalid request method).' => '',
'Error:' => '',
'Expand' => 'Extinde',
'Export' => '',
'Info:' => '',
'Invalid request method!' => '',
'It looks like you may have taken the wrong turn.' => 'Se pare că ai luat-o pe calea greșită.',
'Language' => 'Limbă',
'Loading...' => '',
'Login' => 'Autentificare',
'Logo of {appName}' => '',
'Logout' => 'Ieșire cont',
'Menu' => 'Meniu',
'Module is not enabled on this content container!' => 'Modulul nu este pe acest container de conținut activat!',
'My profile' => 'Profilul meu',
'My profile image' => 'Imagine profil',
'New profile image' => 'Imagine nouă de profil',
'Next' => 'Inainte',
'No error information given.' => '',
'Oooops...' => 'Oooops...',
'Open' => 'Deschide',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Save' => 'Salvează',
'Saved' => 'Salvat',
'Search' => 'Căutare',
'Select Me' => '',
'Show less' => '',
'Show more' => 'Arata mai mult',
'Some files could not be uploaded:' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'The date has to be in the past.' => '',
'The file has been deleted.' => '',
'The requested resource could not be found.' => '',
'The space has been archived.' => '',
'The space has been unarchived.' => '',
'Time Zone' => '',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'Unsubscribe' => '',
'Upload' => 'Incarca',
'Upload file' => 'Incarca fisiere',
'You are not allowed to run this action.' => '',
);
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Confirm</strong> Action' => '',
'<strong>Mail</strong> summary' => '',
'An error occurred while handling your last action. (Handler not found).' => '',
'An unexpected error occurred while loading the search result.' => '',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unknown error occurred while uploading.' => '',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
'Confirm' => '',
'Copy to clipboard' => '',
'Could not find requested page.' => '',
'Default' => '',
'Deny' => '',
'Do you really want to perform this action?' => '',
'Edit' => '',
'Error while running your last action (Invalid request method).' => '',
'Error:' => '',
'Export' => '',
'Info:' => '',
'Invalid request method!' => '',
'Loading...' => '',
'Logo of {appName}' => '',
'No error information given.' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Select Me' => '',
'Show less' => '',
'Some files could not be uploaded:' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'The date has to be in the past.' => '',
'The file has been deleted.' => '',
'The requested resource could not be found.' => '',
'The space has been archived.' => '',
'The space has been unarchived.' => '',
'Time Zone' => '',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'Unsubscribe' => '',
'You are not allowed to run this action.' => '',
'<strong>Latest</strong> updates' => '<strong>Ultimele</strong> actualizări',
'Account settings' => 'Setări de Cont',
'Add:' => 'Adauga',
'Administration' => 'Administrație',
'Allow' => 'Permite',
'Back' => 'Înapoi',
'Back to dashboard' => 'Înapoi la panoul de control',
'Cancel' => 'Anulează',
'Choose language:' => 'Alege limba:',
'Close' => 'Închide',
'Collapse' => 'Strânge',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Sursa Conținutului de Adaos trebuie să fie instanță a HActiveRecordContent sau a HActiveRecordContentAddon!',
'Could not find content of addon!' => 'Nu s-a putut găsi conținutul adaosului!',
'Delete' => 'Sterge',
'Error' => 'Eroare',
'Expand' => 'Extinde',
'It looks like you may have taken the wrong turn.' => 'Se pare că ai luat-o pe calea greșită.',
'Language' => 'Limbă',
'Login' => 'Autentificare',
'Logout' => 'Ieșire cont',
'Menu' => 'Meniu',
'Module is not enabled on this content container!' => 'Modulul nu este pe acest container de conținut activat!',
'My profile' => 'Profilul meu',
'My profile image' => 'Imagine profil',
'New profile image' => 'Imagine nouă de profil',
'Next' => 'Inainte',
'Oooops...' => 'Oooops...',
'Open' => 'Deschide',
'Save' => 'Salvează',
'Saved' => 'Salvat',
'Search' => 'Căutare',
'Show more' => 'Arata mai mult',
'Upload' => 'Incarca',
'Upload file' => 'Incarca fisiere',
];

View File

@ -26,43 +26,15 @@ return [
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unknown error occurred while uploading.' => '',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
'Copy to clipboard' => 'Скопировано в буфер обмена',
'Could not find requested page.' => '',
'Delete' => 'Удалить',
'Do you really want to perform this action?' => 'Вы уверены, что хотите выполнить это действие?',
'Edit' => 'Изменить',
'Error while running your last action (Invalid request method).' => 'Ошибка при выполнении вашего последнего действия (Неверный запрос).',
'Error:' => 'Ошибка:',
'Export' => 'Экспорт',
'Info:' => 'Информация:',
'Invalid request method!' => 'Неверный запрос',
'Loading...' => 'Загрузка...',
'Logo of {appName}' => 'Логотип {appName}',
'My profile image' => 'Моё изображение профиля',
'No error information given.' => 'Информация об ошибке не указана.',
'Please type at least {count} characters' => 'Пожалуйста, введите не менее {count} символов',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Select Me' => 'Выбери',
'Show less' => 'Показать меньше',
'Show more' => 'Показать больше',
'Some files could not be uploaded:' => 'Некоторые файлы не могут быть загружены:',
'Text could not be copied to clipboard' => 'Текст не может быть скопирован в буфер обмена',
'Text has been copied to clipboard' => 'Текст скопирован в буфер обмена',
'The date has to be in the past.' => 'Дата должна быть в прошлом.',
'The file has been deleted.' => 'Файл был удалён.',
'The requested resource could not be found.' => 'Запрошенный ресурс не найден.',
'The space has been archived.' => 'Пространство было архивировано.',
'The space has been unarchived.' => 'Пространство было разархивировано.',
'Time Zone' => 'Часовой пояс',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'Unsubscribe' => 'Отказаться от подписки',
'Upload file' => 'Загрузить файл',
'You are not allowed to run this action.' => 'Вы не можете запускать это действие.',
'<strong>Latest</strong> updates' => '<strong>Последние</strong> обновления',
'Account settings' => 'Настройки аккаунта',
'Administration' => 'Администрирование',
@ -75,25 +47,54 @@ return [
'Collapse' => 'Свернуть',
'Confirm' => 'Подтвердить',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'Источник Content Addon должен быть сущностью HActiveRecordContent либо HActiveRecordContentAddon!',
'Copy to clipboard' => 'Скопировано в буфер обмена',
'Could not find content of addon!' => 'Не удалось найти содержимое дополнения!',
'Default' => 'По умолчанию',
'Delete' => 'Удалить',
'Deny' => 'Отказано',
'Do you really want to perform this action?' => 'Вы уверены, что хотите выполнить это действие?',
'Edit' => 'Изменить',
'Error' => 'Ошибка',
'Error while running your last action (Invalid request method).' => 'Ошибка при выполнении вашего последнего действия (Неверный запрос).',
'Error:' => 'Ошибка:',
'Expand' => 'Развернуть',
'Export' => 'Экспорт',
'Info:' => 'Информация:',
'Invalid request method!' => 'Неверный запрос',
'It looks like you may have taken the wrong turn.' => 'Похоже, что вы сделали что-то не так.',
'Language' => 'Язык',
'Loading...' => 'Загрузка...',
'Login' => 'Войти',
'Logo of {appName}' => 'Логотип {appName}',
'Logout' => 'Выйти',
'Menu' => 'Меню',
'Module is not enabled on this content container!' => 'Модуль не включён в этой оболочке контента',
'My profile' => 'Мой профиль',
'My profile image' => 'Моё изображение профиля',
'New profile image' => 'Новое изображение профиля',
'Next' => 'Следующий',
'No error information given.' => 'Информация об ошибке не указана.',
'Oooops...' => 'Ой...',
'Open' => 'Открыть',
'Please type at least 3 characters' => 'Пожалуйста, введите не менее 3-х символов',
'Please type at least {count} characters' => 'Пожалуйста, введите не менее {count} символов',
'Save' => 'Сохранить',
'Saved' => 'Сохранено',
'Search' => 'Поиск',
'Select Me' => 'Выбери',
'Show less' => 'Показать меньше',
'Show more' => 'Показать больше',
'Some files could not be uploaded:' => 'Некоторые файлы не могут быть загружены:',
'Text could not be copied to clipboard' => 'Текст не может быть скопирован в буфер обмена',
'Text has been copied to clipboard' => 'Текст скопирован в буфер обмена',
'The date has to be in the past.' => 'Дата должна быть в прошлом.',
'The file has been deleted.' => 'Файл был удалён.',
'The requested resource could not be found.' => 'Запрошенный ресурс не найден.',
'The space has been archived.' => 'Пространство было архивировано.',
'The space has been unarchived.' => 'Пространство было разархивировано.',
'Time Zone' => 'Часовой пояс',
'Unsubscribe' => 'Отказаться от подписки',
'Upload' => 'Загрузить',
'Upload file' => 'Загрузить файл',
'You are not allowed to run this action.' => 'Вы не можете запускать это действие.',
];

View File

@ -69,6 +69,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -70,6 +70,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -1,82 +1,100 @@
<?php
return array (
'<strong>Confirm</strong> Action' => '<strong>Bekräfta</strong> val',
'<strong>Latest</strong> updates' => '<strong>Senaste</strong> uppdateringarna',
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sammanställning',
'Account settings' => 'Kontoinställningar',
'Add:' => 'Lägg till:',
'Administration' => 'Administration',
'Allow' => 'Tillåt',
'An error occurred while handling your last action. (Handler not found).' => '',
'An unexpected error occurred while loading the search result.' => '',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unknown error occurred while uploading.' => '',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
'Back' => 'Tillbaka',
'Back to dashboard' => 'Tillbaka till översikt',
'Cancel' => 'Avbryt',
'Choose language:' => 'Välj språk:',
'Close' => 'Stäng',
'Collapse' => 'Minska',
'Confirm' => 'Bekräfta',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => '',
'Copy to clipboard' => 'Kopiera urklipp',
'Could not find content of addon!' => '',
'Could not find requested page.' => 'Det gick inte att hitta önskad sida.',
'Default' => 'Standard',
'Delete' => 'Radera',
'Deny' => 'Neka',
'Do you really want to perform this action?' => 'Vill du verkligen utföra det här åtgärdet?',
'Edit' => 'Ändra',
'Error' => 'Error',
'Error while running your last action (Invalid request method).' => '',
'Error:' => 'Fel:',
'Expand' => 'Expandera',
'Export' => 'Exportera',
'Info:' => '',
'Invalid request method!' => '',
'It looks like you may have taken the wrong turn.' => '',
'Language' => 'Språk',
'Loading...' => 'Laddar...',
'Login' => 'Logga In',
'Logo of {appName}' => '',
'Logout' => 'Logga ut',
'Menu' => 'Meny',
'Module is not enabled on this content container!' => '',
'My profile' => 'Min profil',
'My profile image' => 'Min profilbild',
'New profile image' => 'Ny profil bild',
'Next' => 'Nästa',
'No error information given.' => '',
'Oooops...' => 'Hoppsan....',
'Open' => 'Öppna',
'Please type at least 3 characters' => 'Ange minst 3 tecken',
'Please type at least {count} characters' => 'Ange minst {count} tecken',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Save' => 'Spara',
'Saved' => 'Sparad',
'Search' => 'Sök',
'Select Me' => 'Välj mig',
'Show less' => 'Visa mindre',
'Show more' => 'Visa mer',
'Some files could not be uploaded:' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'The date has to be in the past.' => '',
'The file has been deleted.' => 'Filen har blivit raderad',
'The requested resource could not be found.' => '',
'The space has been archived.' => '',
'The space has been unarchived.' => '',
'Time Zone' => 'Tidzon',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'Unsubscribe' => 'Prenumerera',
'Upload' => 'Ladda upp',
'Upload file' => 'Ladda upp fil',
'You are not allowed to run this action.' => '',
);
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'An error occurred while handling your last action. (Handler not found).' => '',
'An unexpected error occurred while loading the search result.' => '',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => '',
'An unknown error occurred while uploading.' => '',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => '',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => '',
'Could not find content of addon!' => '',
'Error while running your last action (Invalid request method).' => '',
'Info:' => '',
'Invalid request method!' => '',
'It looks like you may have taken the wrong turn.' => '',
'Logo of {appName}' => '',
'Module is not enabled on this content container!' => '',
'No error information given.' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',
'Some files could not be uploaded:' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',
'The date has to be in the past.' => '',
'The requested resource could not be found.' => '',
'The space has been archived.' => '',
'The space has been unarchived.' => '',
'Toggle comment menu' => '',
'Toggle panel menu' => '',
'Toggle post menu' => '',
'Toggle stream entry menu' => '',
'You are not allowed to run this action.' => '',
'<strong>Confirm</strong> Action' => '<strong>Bekräfta</strong> val',
'<strong>Latest</strong> updates' => '<strong>Senaste</strong> uppdateringarna',
'<strong>Mail</strong> summary' => '<strong>Mail</strong> sammanställning',
'Account settings' => 'Kontoinställningar',
'Add:' => 'Lägg till:',
'Administration' => 'Administration',
'Allow' => 'Tillåt',
'Back' => 'Tillbaka',
'Back to dashboard' => 'Tillbaka till översikt',
'Cancel' => 'Avbryt',
'Choose language:' => 'Välj språk:',
'Close' => 'Stäng',
'Collapse' => 'Minska',
'Confirm' => 'Bekräfta',
'Copy to clipboard' => 'Kopiera urklipp',
'Could not find requested page.' => 'Det gick inte att hitta önskad sida.',
'Default' => 'Standard',
'Delete' => 'Radera',
'Deny' => 'Neka',
'Do you really want to perform this action?' => 'Vill du verkligen utföra det här åtgärdet?',
'Edit' => 'Ändra',
'Error' => 'Error',
'Error:' => 'Fel:',
'Expand' => 'Expandera',
'Export' => 'Exportera',
'Language' => 'Språk',
'Loading...' => 'Laddar...',
'Login' => 'Logga In',
'Logout' => 'Logga ut',
'Menu' => 'Meny',
'My profile' => 'Min profil',
'My profile image' => 'Min profilbild',
'New profile image' => 'Ny profil bild',
'Next' => 'Nästa',
'Oooops...' => 'Hoppsan....',
'Open' => 'Öppna',
'Please type at least 3 characters' => 'Ange minst 3 tecken',
'Please type at least {count} characters' => 'Ange minst {count} tecken',
'Save' => 'Spara',
'Saved' => 'Sparad',
'Search' => 'Sök',
'Select Me' => 'Välj mig',
'Show less' => 'Visa mindre',
'Show more' => 'Visa mer',
'The file has been deleted.' => 'Filen har blivit raderad',
'Time Zone' => 'Tidzon',
'Unsubscribe' => 'Prenumerera',
'Upload' => 'Ladda upp',
'Upload file' => 'Ladda upp fil',
];

View File

@ -47,6 +47,7 @@ return [
'No error information given.' => '',
'Open' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

File diff suppressed because one or more lines are too long

View File

@ -1,82 +1,100 @@
<?php
return array (
'<strong>Confirm</strong> Action' => 'İşlemi <strong>Onayla</strong>',
'<strong>Latest</strong> updates' => '<strong>Son</strong> güncellemeler',
'<strong>Mail</strong> summary' => '<strong>Mesaj</strong> özeti',
'Account settings' => 'Hesap ayarları',
'Add:' => 'Ekle:',
'Administration' => 'Yönetim',
'Allow' => 'İzin ver',
'An error occurred while handling your last action. (Handler not found).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (İşleyici bulunamadı).',
'An unexpected error occurred while loading the search result.' => 'Arama sonuçlarını yüklerken beklenmeyen bir hata oluştu.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir hata oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir server hatası oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
'An unknown error occurred while uploading.' => 'Yüklenirken bilinmeyen bir hata oluştu.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Yüklenirken bilinmeyen bir hata oluştu. İpucu: upload_max_filesize ve post_max_size php ayarlarınızı kontrol edin.',
'Back' => 'Geri',
'Back to dashboard' => 'Panele geri dön',
'Cancel' => 'İptal',
'Choose language:' => 'Dil Seçin:',
'Close' => 'Kapat',
'Collapse' => 'Gizle',
'Confirm' => 'Doğrula',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'İçerik eklenti kaynağı HActiveRecordContent ya da HActiveRecordAddon şeklinde olmalı!',
'Copy to clipboard' => 'Panoya kopyala',
'Could not find content of addon!' => 'Eklenti içeriği bulunamadı!',
'Could not find requested page.' => 'İstenen sayfa bulunamadı.',
'Default' => 'Standart',
'Delete' => 'Sil',
'Deny' => 'Reddet',
'Do you really want to perform this action?' => 'Bu işlemi gerçekleştirmek istiyor musunuz?',
'Edit' => 'Düzenle',
'Error' => 'Hata',
'Error while running your last action (Invalid request method).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (Geçersiz istek).',
'Error:' => 'Hata:',
'Expand' => 'Göster',
'Export' => ıkart',
'Info:' => 'Bilgi:',
'Invalid request method!' => 'Geçersiz istek yöntemi!',
'It looks like you may have taken the wrong turn.' => 'Yanlış bir geridönüş var gibi görünüyor.',
'Language' => 'Dil',
'Loading...' => 'Yükleniyor...',
'Login' => 'Giriş',
'Logo of {appName}' => '{appName} Logosu',
'Logout' => ıkış',
'Menu' => 'Menü',
'Module is not enabled on this content container!' => 'Etkin içerik kabı üzerinde modül etkin değil!',
'My profile' => 'Profilim',
'My profile image' => 'Profil resmim',
'New profile image' => 'Yeni profil resmi',
'Next' => 'İleri',
'No error information given.' => 'Hata bilgisi verilmedi.',
'Oooops...' => 'Hata!',
'Open' => 'Aç',
'Please type at least 3 characters' => 'Lütfen en az 3 karakter giriniz',
'Please type at least {count} characters' => 'Lütfen en az {count} karakter girin',
'Profile dropdown' => 'Profil menüsü',
'Profile image of {displayName}' => 'Profil resmi {displayName}',
'Profile picture of {displayName}' => 'Profil fotoğrafı {displayName}',
'Save' => 'Kaydet',
'Saved' => 'Kaydet',
'Search' => 'Arama',
'Select Me' => 'Beni Seç',
'Show less' => 'Daha az göster',
'Show more' => 'Daha fazla göster',
'Some files could not be uploaded:' => 'Bazı dosyalar yüklenemedi:',
'Text could not be copied to clipboard' => 'Metin panosu kopyalanamadı',
'Text has been copied to clipboard' => 'Metin panosu kopyalandı',
'The date has to be in the past.' => 'Geçmiş bir tarih girilmesi gerekiyor.',
'The file has been deleted.' => 'Dosya silinmiştir.',
'The requested resource could not be found.' => 'İstenilen kaynak bulunamadı.',
'The space has been archived.' => 'Alan arşivlenmiştir.',
'The space has been unarchived.' => 'Alan arşivden çıkarılmıştır.',
'Time Zone' => 'Saat Dilimi',
'Toggle comment menu' => 'Yorum menüsü değiştirme',
'Toggle panel menu' => 'Panel menüsünü aç / kapat',
'Toggle post menu' => 'Yayın menüsünü aç / kapat',
'Toggle stream entry menu' => 'Akış giriş menüsünü aç / kapat',
'Unsubscribe' => 'Abonelikten çık',
'Upload' => 'Yükle',
'Upload file' => 'Dosya yükle',
'You are not allowed to run this action.' => 'Bu işlemi yapmaya izniniz yok.',
);
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'Powered by {name}' => '',
'<strong>Confirm</strong> Action' => 'İşlemi <strong>Onayla</strong>',
'<strong>Latest</strong> updates' => '<strong>Son</strong> güncellemeler',
'<strong>Mail</strong> summary' => '<strong>Mesaj</strong> özeti',
'Account settings' => 'Hesap ayarları',
'Add:' => 'Ekle:',
'Administration' => 'Yönetim',
'Allow' => 'İzin ver',
'An error occurred while handling your last action. (Handler not found).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (İşleyici bulunamadı).',
'An unexpected error occurred while loading the search result.' => 'Arama sonuçlarını yüklerken beklenmeyen bir hata oluştu.',
'An unexpected error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir hata oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
'An unexpected server error occurred. If this keeps happening, please contact a site administrator.' => 'Beklenmeyen bir server hatası oluştu. Eğer bu hata devam ederse lütfen bildiriniz.',
'An unknown error occurred while uploading.' => 'Yüklenirken bilinmeyen bir hata oluştu.',
'An unknown error occurred while uploading. Hint: check your upload_max_filesize and post_max_size php settings.' => 'Yüklenirken bilinmeyen bir hata oluştu. İpucu: upload_max_filesize ve post_max_size php ayarlarınızı kontrol edin.',
'Back' => 'Geri',
'Back to dashboard' => 'Panele geri dön',
'Cancel' => 'İptal',
'Choose language:' => 'Dil Seçin:',
'Close' => 'Kapat',
'Collapse' => 'Gizle',
'Confirm' => 'Doğrula',
'Content Addon source must be instance of HActiveRecordContent or HActiveRecordContentAddon!' => 'İçerik eklenti kaynağı HActiveRecordContent ya da HActiveRecordAddon şeklinde olmalı!',
'Copy to clipboard' => 'Panoya kopyala',
'Could not find content of addon!' => 'Eklenti içeriği bulunamadı!',
'Could not find requested page.' => 'İstenen sayfa bulunamadı.',
'Default' => 'Standart',
'Delete' => 'Sil',
'Deny' => 'Reddet',
'Do you really want to perform this action?' => 'Bu işlemi gerçekleştirmek istiyor musunuz?',
'Edit' => 'Düzenle',
'Error' => 'Hata',
'Error while running your last action (Invalid request method).' => 'Son işleminiz gerçekleştirilirken bir hata oluştu. (Geçersiz istek).',
'Error:' => 'Hata:',
'Expand' => 'Göster',
'Export' => ıkart',
'Info:' => 'Bilgi:',
'Invalid request method!' => 'Geçersiz istek yöntemi!',
'It looks like you may have taken the wrong turn.' => 'Yanlış bir geridönüş var gibi görünüyor.',
'Language' => 'Dil',
'Loading...' => 'Yükleniyor...',
'Login' => 'Giriş',
'Logo of {appName}' => '{appName} Logosu',
'Logout' => ıkış',
'Menu' => 'Menü',
'Module is not enabled on this content container!' => 'Etkin içerik kabı üzerinde modül etkin değil!',
'My profile' => 'Profilim',
'My profile image' => 'Profil resmim',
'New profile image' => 'Yeni profil resmi',
'Next' => 'İleri',
'No error information given.' => 'Hata bilgisi verilmedi.',
'Oooops...' => 'Hata!',
'Open' => 'Aç',
'Please type at least 3 characters' => 'Lütfen en az 3 karakter giriniz',
'Please type at least {count} characters' => 'Lütfen en az {count} karakter girin',
'Profile dropdown' => 'Profil menüsü',
'Profile image of {displayName}' => 'Profil resmi {displayName}',
'Profile picture of {displayName}' => 'Profil fotoğrafı {displayName}',
'Save' => 'Kaydet',
'Saved' => 'Kaydet',
'Search' => 'Arama',
'Select Me' => 'Beni Seç',
'Show less' => 'Daha az göster',
'Show more' => 'Daha fazla göster',
'Some files could not be uploaded:' => 'Bazı dosyalar yüklenemedi:',
'Text could not be copied to clipboard' => 'Metin panosu kopyalanamadı',
'Text has been copied to clipboard' => 'Metin panosu kopyalandı',
'The date has to be in the past.' => 'Geçmiş bir tarih girilmesi gerekiyor.',
'The file has been deleted.' => 'Dosya silinmiştir.',
'The requested resource could not be found.' => 'İstenilen kaynak bulunamadı.',
'The space has been archived.' => 'Alan arşivlenmiştir.',
'The space has been unarchived.' => 'Alan arşivden çıkarılmıştır.',
'Time Zone' => 'Saat Dilimi',
'Toggle comment menu' => 'Yorum menüsü değiştirme',
'Toggle panel menu' => 'Panel menüsünü aç / kapat',
'Toggle post menu' => 'Yayın menüsünü aç / kapat',
'Toggle stream entry menu' => 'Akış giriş menüsünü aç / kapat',
'Unsubscribe' => 'Abonelikten çık',
'Upload' => 'Yükle',
'Upload file' => 'Dosya yükle',
'You are not allowed to run this action.' => 'Bu işlemi yapmaya izniniz yok.',
];

View File

@ -70,6 +70,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -70,6 +70,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -24,6 +24,7 @@ return [
'Export' => '',
'Invalid request method!' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Select Me' => '',
'Text could not be copied to clipboard' => '',
'Text has been copied to clipboard' => '',

View File

@ -25,6 +25,7 @@ return [
'Invalid request method!' => '',
'Logo of {appName}' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -57,6 +57,7 @@ return [
'Open' => '',
'Please type at least 3 characters' => '',
'Please type at least {count} characters' => '',
'Powered by {name}' => '',
'Profile dropdown' => '',
'Profile image of {displayName}' => '',
'Profile picture of {displayName}' => '',

View File

@ -8,20 +8,65 @@
namespace humhub\models;
use yii\base\InvalidArgumentException;
use humhub\libs\RestrictedCallException;
use humhub\libs\UrlOembedClient;
use humhub\libs\UrlOembedHttpClient;
use yii\helpers\Html;
use yii\helpers\Json;
use yii\db\ActiveRecord;
use Yii;
/**
* This is the model class for table "url_oembed".
* UrlOembed records hold already loaded oembed previews.
*
* This class is used to fetch and save oembed results by means of the [[preload()]] and [[getOEmbed()]] methods.
*
* [[preload()]] can be used to preload oembed results for a given text string.
*
* [[getOEmbed()]] can be used to fetch a single oembed record for a given Url.
*
* All successfull results of `preload()` or `getOEmbed()` will be cached and saved in the `url_oembed` table.
*
* @property string $url
* @property string $preview
*/
class UrlOembed extends ActiveRecord
{
/**
* @var int Maximum amount of remote fetch calls per request
*/
public static $maxUrlFetchLimit = 5;
/**
* @var int Maximum amount of local db fetch calls per request
*/
public static $maxUrlLoadLimit = 100;
/**
* @var int Counter for remote fetch calls
*/
protected static $urlsFetched = 0;
/**
* @var int Counter for local db fetch calls
*/
protected static $urlsLoaded = 0;
/**
* @var array Internal request cache
*/
protected static $cache = [];
/**
* @var UrlOembedClient
*/
protected static $client;
/**
* @var array Allowed oembed types
*/
public static $allowed_types = ['video', 'rich', 'photo'];
/**
* @inheritdoc
@ -55,110 +100,204 @@ class UrlOembed extends ActiveRecord
}
/**
* Returns OEmbed Code for a given URL
* If no oembed code is found, null is returned
* Returns the OEmbed API Url if exists
*
* @return string|null
*/
public function getProviderUrl()
{
foreach (static::getProviders() as $providerBaseUrl => $providerAPI) {
if (strpos($this->url, $providerBaseUrl) !== false) {
return str_replace("%url%", urlencode($this->url), $providerAPI);
}
}
return null;
}
/**
* Flushes internal caches and fetch counters
*/
public static function flush()
{
static::$cache = [];
static::$urlsFetched = 0;
static::$urlsLoaded = 0;
}
/**
* Returns a OEmbed html string for a given $url or null in the following cases:
*
* - There is no OEmbed provider available for the given url
* - The OEmbed provider does not return a valid response
* - A fetch counter restriction exceeded
*
* @param string $url
*
* @return null|string
* @return string|null
*/
public static function GetOEmbed($url)
public static function getOEmbed($url)
{
$url = trim($url);
try {
$url = trim($url);
// Check if the given URL has OEmbed Support
if (UrlOembed::hasOEmbedSupport($url)) {
if (static::hasOEmbedSupport($url)) {
$urlOembed = static::findExistingOembed($url);
$result = $urlOembed ? $urlOembed->preview : self::loadUrl($url);
// Lookup Cached OEmebed Item from Database
$urlOembed = UrlOembed::findOne(['url' => $url]);
if ($urlOembed !== null) {
return trim(preg_replace('/\s+/', ' ', $urlOembed->preview));
} else {
return trim(preg_replace('/\s+/', ' ', self::loadUrl($url)));
if(!empty($result)) {
return trim(preg_replace('/\s+/', ' ', $result));
}
}
} catch(RestrictedCallException $re) {
Yii::warning($re);
}
return null;
}
/**
* Prebuilds oembeds for all urls in a given text
* Parses the given $text string for urls an saves new loaded OEmbed instances for.
*
* @param string|array $text
* This method will only execute a remote fetch call if:
*
* - There was a provider found for the given url
* - The same url has not been fetched before
* - The max fetch counters are not exceeded
*
* @param string $text
*/
public static function preload($text)
{
preg_replace_callback('/http(.*?)(\s|$)/i', function ($match) {
$url = $match[0];
$url = trim($match[0]);
// Already looked up?
if (UrlOembed::findOne(['url' => $url]) !== null) {
if (!static::hasOEmbedSupport($url)) {
return;
}
UrlOembed::loadUrl($url);
try {
if (!static::findExistingOembed($url)) {
static::loadUrl($url);
}
} catch(RestrictedCallException $re) {
Yii::warning($re);
}
}, $text);
}
/**
* Loads OEmbed Data from a given URL and writes them to the database
* Checks if there is an existing UrlOembed record for the given $url.
*
* @param string $url
* > Note: Results will be cached for this request if an record was found.
*
* @return string
* @param $url
* @return UrlOembed|null
* @throws RestrictedCallException
*/
public static function loadUrl($url)
protected static function findExistingOembed($url)
{
$urlOembed = new UrlOembed();
$urlOembed->url = $url;
$html = '';
if ($urlOembed->getProviderUrl() != '') {
// Build OEmbed Preview
$jsonOut = UrlOembed::fetchUrl($urlOembed->getProviderUrl());
if ($jsonOut != '' && $jsonOut != 'Unauthorized') {
try {
$data = Json::decode($jsonOut);
if (isset($data['html']) && isset($data['type']) && ($data['type'] === "video" || $data['type'] === 'rich' || $data['type'] === 'photo')) {
$html = "<div data-guid='".uniqid('oembed-')."' data-richtext-feature class='oembed_snippet' data-url='" . Html::encode($url) . "'>" . $data['html'] . "</div>";
}
} catch (InvalidArgumentException $ex) {
Yii::warning($ex->getMessage());
}
}
if(array_key_exists($url, static::$cache)) {
return static::$cache[$url];
}
if ($html != '') {
$urlOembed->preview = $html;
$urlOembed->save();
if(static::$urlsLoaded >= static::$maxUrlLoadLimit) {
throw new RestrictedCallException('Max url db load limit exceeded.');
}
return $html;
static::$urlsLoaded++;
$record = static::findOne(['url' => $url]);
if($record) {
static::$cache[$url] = $record;
}
return $record;
}
/**
* Returns the OEmbed API Url if exists
* Fetches the oembed result for a given $url and saves an UrlOembed record to the database.
* A Remote fetch for new urls is only executed in case there is a related provider for the given url configured.
*
* @param string $url
* @return string|null
*/
public function getProviderUrl()
protected static function loadUrl($url)
{
foreach (UrlOembed::getProviders() as $providerBaseUrl => $providerAPI) {
if (strpos($this->url, $providerBaseUrl) !== false) {
return str_replace("%url%", urlencode($this->url), $providerAPI);
try {
$urlOembed = static::findExistingOembed($url);
if(!$urlOembed) {
$urlOembed = new static(['url' => $url]);
}
if(empty($urlOembed->getProviderUrl())) {
return null;
}
$data = static::fetchUrl($urlOembed->getProviderUrl());
$html = static::buildHtmlPreview($url, $data);
$urlOembed->preview = $html ?: '';
$urlOembed->save();
static::$cache[$url] = $urlOembed;
return $html;
} catch(RestrictedCallException $re) {
Yii::warning($re);
}
return '';
return null;
}
/**
* Builds the oembed preview html result in case the given $data array is valid.
*
* @param $url
* @param []|null $data
* @return string|null
*/
protected static function buildHtmlPreview($url, $data = null)
{
if(static::validateOembedResponse($data)) {
return Html::tag('div', $data['html'], [
'data' => [
'guid' => uniqid('oembed-', true),
'richtext-feature' => 1,
'class' => 'oembed_snippet',
'url' => Html::encode($url)
]
]);
}
return null;
}
/**
* Validates the given $data array.
*
* @param []|null $data
* @return bool
*/
protected static function validateOembedResponse($data = null)
{
return !empty($data) &&
isset($data['html'], $data['type'])
&& in_array($data['type'], static::$allowed_types, true);
}
/**
* Checks if a given URL Supports OEmbed
*
* @param string $url
*
* @return boolean
*/
public static function hasOEmbedSupport($url)
{
foreach (UrlOembed::getProviders() as $providerBaseUrl => $providerAPI) {
foreach (static::getProviders() as $providerBaseUrl => $providerAPI) {
if (strpos($url, $providerBaseUrl) !== false) {
return true;
}
@ -168,42 +307,45 @@ class UrlOembed extends ActiveRecord
}
/**
* Fetches a given URL and returns content
* Executes the remote fetch call in case the [$maxUrlFetchLimit] is not reached.
*
* @param string $url
*
* @return mixed|boolean
* @return array|null
* @throws RestrictedCallException
*/
public static function fetchUrl($url)
protected static function fetchUrl($url)
{
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 15);
// Not available when open_basedir or safe_mode is set.
if (!function_exists('ini_get') || !ini_get('open_basedir') || !ini_get('safe_mode')) {
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
if(static::$urlsFetched >= static::$maxUrlFetchLimit) {
throw new RestrictedCallException('Max url fetch limit exceeded.');
}
if (Yii::$app->settings->get('proxy.enabled')) {
curl_setopt($curl, CURLOPT_PROXY, Yii::$app->settings->get('proxy.server'));
curl_setopt($curl, CURLOPT_PROXYPORT, Yii::$app->settings->get('proxy.port'));
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_setopt($curl, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
if (defined('CURLOPT_PROXYUSERNAME')) {
curl_setopt($curl, CURLOPT_PROXYUSERNAME, Yii::$app->settings->get('proxy.user'));
}
if (defined('CURLOPT_PROXYPASSWORD')) {
curl_setopt($curl, CURLOPT_PROXYPASSWORD, Yii::$app->settings->get('proxy.password'));
}
if (defined('CURLOPT_NOPROXY')) {
curl_setopt($curl, CURLOPT_NOPROXY, Yii::$app->settings->get('proxy.noproxy'));
}
}
$return = curl_exec($curl);
curl_close($curl);
return $return;
static::$urlsFetched++;
return static::getClient()->fetchUrl($url);
}
/**
* Returns the UrlOembedClient responsible for fetching OEmbed results.
*
* @return UrlOembedClient
*/
public static function getClient()
{
if(!static::$client) {
static::$client = new UrlOembedHttpClient();
}
return static::$client;
}
/**
* Sets the UrlOembedClient responsible for fetching OEmbed results.
*
* @param null $client
*/
public static function setClient($client = null)
{
static::$client = $client;
}
/**
@ -214,7 +356,7 @@ class UrlOembed extends ActiveRecord
public static function getProviders()
{
$providers = Yii::$app->settings->get('oembedProviders');
if ($providers != '') {
if (!empty($providers)) {
return Json::decode($providers);
}

View File

@ -12,6 +12,7 @@ use Yii;
use humhub\components\Controller;
use humhub\modules\activity\models\Activity;
use humhub\components\behaviors\AccessControl;
use yii\web\HttpException;
/**
* LinkController provides link informations about an Activity via JSON.
@ -44,6 +45,8 @@ class LinkController extends Controller
if ($activity !== null && $activity->content->canView()) {
$this->redirect($activity->getActivityBaseClass()->getUrl());
} else {
throw new HttpException(403);
}
}

View File

@ -0,0 +1,23 @@
<?php
return array (
'<strong>E-Mail</strong> Summaries' => '',
'Activities' => 'Obererezhioù',
'Daily' => '',
'E-Mail Summaries' => '',
'E-Mail summaries are sent to inform you about recent activities in the network.' => '',
'E-Mail summaries are sent to users to inform them about recent activities in your network.' => '',
'Exclude spaces below from the mail summary' => '',
'Hourly' => '',
'Interval' => '',
'Latest news' => '',
'Never' => 'Morse',
'On this page you can configure the contents and the interval of these e-mail updates.' => '',
'On this page you can define the default behavior for your users. These settings can be overwritten by users in their account settings page.' => '',
'Only include spaces below to the mail summary' => '',
'Reset to defaults' => '',
'Spaces' => 'Pajennoù',
'Weekly' => '',
'You will only receive an e-mail if there is something new.' => '',
'Your daily summary' => '',
'Your weekly summary' => '',
);

View File

@ -0,0 +1,22 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'%displayName% created the new space %spaceName%' => '',
'%displayName% created this space.' => '',
];

View File

@ -0,0 +1,24 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'%displayName% joined the space %spaceName%' => '',
'%displayName% joined this space.' => '',
'%spaceName% has been archived' => '',
'%spaceName% has been unarchived' => '',
];

View File

@ -0,0 +1,22 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'%displayName% left the space %spaceName%' => '',
'%displayName% left this space.' => '',
];

View File

@ -0,0 +1,21 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'{user1} now follows {user2}.' => '',
];

View File

@ -0,0 +1,23 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'See online:' => '',
'see online' => '',
'via' => '',
];

View File

@ -0,0 +1,22 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'<strong>Latest</strong> activities' => '',
'There are no activities yet.' => '',
];

View File

@ -1,24 +1,7 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'%spaceName% has been archived' => '',
'%spaceName% has been unarchived' => '',
'%displayName% joined the space %spaceName%' => '%displayName% pridružio se prostoru %spaceName%',
'%displayName% joined this space.' => '%displayName% pridružio se ovom prostoru.',
];
return array (
'%displayName% joined the space %spaceName%' => '%displayName% pridružio se prostoru %spaceName%',
'%displayName% joined this space.' => '%displayName% pridružio se ovom prostoru.',
'%spaceName% has been archived' => '%spaceName% je arhiviran',
'%spaceName% has been unarchived' => '%spaceName% je uklonjen iz arhive',
);

View File

@ -89,6 +89,9 @@ class Activity extends ContentActiveRecord
* Returns the related BaseActivity object of this Activity record.
*
* @return \humhub\modules\activity\components\BaseActivity
* @throws Exception
* @throws \yii\base\InvalidConfigException
* @throws \yii\db\IntegrityException
*/
public function getActivityBaseClass()
{

View File

@ -0,0 +1,374 @@
<?php
// @codingStandardsIgnoreFile
// @codeCoverageIgnoreStart
/**
* C3 - Codeception Code Coverage
*
* @author tiger
*/
if (isset($_COOKIE['CODECEPTION_CODECOVERAGE'])) {
$cookie = json_decode($_COOKIE['CODECEPTION_CODECOVERAGE'], true);
// fix for improperly encoded JSON in Code Coverage cookie with WebDriver.
// @see https://github.com/Codeception/Codeception/issues/874
if (!is_array($cookie)) {
$cookie = json_decode($cookie, true);
}
if ($cookie) {
foreach ($cookie as $key => $value) {
$_SERVER["HTTP_X_CODECEPTION_" . strtoupper($key)] = $value;
}
}
}
if (!function_exists('__c3_error')) {
function __c3_error($message)
{
$errorLogFile = defined('C3_CODECOVERAGE_ERROR_LOG_FILE') ?
C3_CODECOVERAGE_ERROR_LOG_FILE :
C3_CODECOVERAGE_MEDIATE_STORAGE . DIRECTORY_SEPARATOR . 'error.txt';
if (is_writable($errorLogFile)) {
file_put_contents($errorLogFile, $message);
} else {
$message = "Could not write error to log file ($errorLogFile), original message: $message";
}
if (!headers_sent()) {
header('X-Codeception-CodeCoverage-Error: ' . str_replace("\n", ' ', $message), true, 500);
}
setcookie('CODECEPTION_CODECOVERAGE_ERROR', $message);
}
}
if (!array_key_exists('HTTP_X_CODECEPTION_CODECOVERAGE', $_SERVER)) {
return;
}
// Autoload Codeception classes
if (!class_exists('\\Codeception\\Codecept')) {
if (file_exists(__DIR__ . '/codecept.phar')) {
require_once 'phar://' . __DIR__ . '/codecept.phar/autoload.php';
} elseif (stream_resolve_include_path(__DIR__ . '/vendor/autoload.php')) {
require_once __DIR__ . '/vendor/autoload.php';
// Required to load some methods only available at codeception/autoload.php
if (stream_resolve_include_path(__DIR__ . '/vendor/codeception/codeception/autoload.php')) {
require_once __DIR__ . '/vendor/codeception/codeception/autoload.php';
}
} elseif (stream_resolve_include_path('Codeception/autoload.php')) {
require_once 'Codeception/autoload.php';
} else {
__c3_error('Codeception is not loaded. Please check that either PHAR or Composer package can be used');
}
}
// phpunit codecoverage shimming
if (!class_exists('PHP_CodeCoverage') and class_exists('SebastianBergmann\CodeCoverage\CodeCoverage')) {
class_alias('SebastianBergmann\CodeCoverage\CodeCoverage', 'PHP_CodeCoverage');
class_alias('SebastianBergmann\CodeCoverage\Report\Text', 'PHP_CodeCoverage_Report_Text');
class_alias('SebastianBergmann\CodeCoverage\Report\PHP', 'PHP_CodeCoverage_Report_PHP');
class_alias('SebastianBergmann\CodeCoverage\Report\Clover', 'PHP_CodeCoverage_Report_Clover');
class_alias('SebastianBergmann\CodeCoverage\Report\Crap4j', 'PHP_CodeCoverage_Report_Crap4j');
class_alias('SebastianBergmann\CodeCoverage\Report\Html\Facade', 'PHP_CodeCoverage_Report_HTML');
class_alias('SebastianBergmann\CodeCoverage\Report\Xml\Facade', 'PHP_CodeCoverage_Report_XML');
class_alias('SebastianBergmann\CodeCoverage\Exception', 'PHP_CodeCoverage_Exception');
}
// phpunit version
if (!class_exists('PHPUnit_Runner_Version') && class_exists('PHPUnit\Runner\Version')) {
class_alias('PHPUnit\Runner\Version', 'PHPUnit_Runner_Version');
}
// Load Codeception Config
$configDistFile = realpath(__DIR__) . DIRECTORY_SEPARATOR . 'codeception.dist.yml';
$configFile = realpath(__DIR__) . DIRECTORY_SEPARATOR . 'codeception.yml';
if (isset($_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_CONFIG'])) {
$configFile = realpath(__DIR__) . DIRECTORY_SEPARATOR . $_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_CONFIG'];
}
if (file_exists($configFile)) {
// Use codeception.yml for configuration.
} elseif (file_exists($configDistFile)) {
// Use codeception.dist.yml for configuration.
$configFile = $configDistFile;
} else {
__c3_error(sprintf("Codeception config file '%s' not found", $configFile));
}
try {
\Codeception\Configuration::config($configFile);
} catch (\Exception $e) {
__c3_error($e->getMessage());
}
if (!defined('C3_CODECOVERAGE_MEDIATE_STORAGE')) {
// workaround for 'zend_mm_heap corrupted' problem
gc_disable();
$memoryLimit = ini_get('memory_limit');
$requiredMemory = '384M';
if ((substr($memoryLimit, -1) === 'M' && (int)$memoryLimit < (int)$requiredMemory)
|| (substr($memoryLimit, -1) === 'K' && (int)$memoryLimit < (int)$requiredMemory * 1024)
|| (ctype_digit($memoryLimit) && (int)$memoryLimit < (int)$requiredMemory * 1024 * 1024)
) {
ini_set('memory_limit', $requiredMemory);
}
define('C3_CODECOVERAGE_MEDIATE_STORAGE', Codeception\Configuration::logDir() . 'c3tmp');
define('C3_CODECOVERAGE_PROJECT_ROOT', Codeception\Configuration::projectDir());
define('C3_CODECOVERAGE_TESTNAME', $_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE']);
function __c3_build_html_report(PHP_CodeCoverage $codeCoverage, $path)
{
$writer = new PHP_CodeCoverage_Report_HTML();
$writer->process($codeCoverage, $path . 'html');
if (file_exists($path . '.tar')) {
unlink($path . '.tar');
}
$phar = new PharData($path . '.tar');
$phar->setSignatureAlgorithm(Phar::SHA1);
$files = $phar->buildFromDirectory($path . 'html');
array_map('unlink', $files);
if (in_array('GZ', Phar::getSupportedCompression())) {
if (file_exists($path . '.tar.gz')) {
unlink($path . '.tar.gz');
}
$phar->compress(\Phar::GZ);
// close the file so that we can rename it
unset($phar);
unlink($path . '.tar');
rename($path . '.tar.gz', $path . '.tar');
}
return $path . '.tar';
}
function __c3_build_clover_report(PHP_CodeCoverage $codeCoverage, $path)
{
$writer = new PHP_CodeCoverage_Report_Clover();
$writer->process($codeCoverage, $path . '.clover.xml');
return $path . '.clover.xml';
}
function __c3_build_crap4j_report(PHP_CodeCoverage $codeCoverage, $path)
{
$writer = new PHP_CodeCoverage_Report_Crap4j();
$writer->process($codeCoverage, $path . '.crap4j.xml');
return $path . '.crap4j.xml';
}
function __c3_build_phpunit_report(PHP_CodeCoverage $codeCoverage, $path)
{
$writer = new PHP_CodeCoverage_Report_XML(\PHPUnit_Runner_Version::id());
$writer->process($codeCoverage, $path . 'phpunit');
if (file_exists($path . '.tar')) {
unlink($path . '.tar');
}
$phar = new PharData($path . '.tar');
$phar->setSignatureAlgorithm(Phar::SHA1);
$files = $phar->buildFromDirectory($path . 'phpunit');
array_map('unlink', $files);
if (in_array('GZ', Phar::getSupportedCompression())) {
if (file_exists($path . '.tar.gz')) {
unlink($path . '.tar.gz');
}
$phar->compress(\Phar::GZ);
// close the file so that we can rename it
unset($phar);
unlink($path . '.tar');
rename($path . '.tar.gz', $path . '.tar');
}
return $path . '.tar';
}
function __c3_send_file($filename)
{
if (!headers_sent()) {
readfile($filename);
}
return __c3_exit();
}
/**
* @param $filename
* @param bool $lock Lock the file for writing?
* @return [null|PHP_CodeCoverage|\SebastianBergmann\CodeCoverage\CodeCoverage, resource]
*/
function __c3_factory($filename, $lock = false)
{
$file = null;
if ($filename !== null && is_readable($filename)) {
if ($lock) {
$file = fopen($filename, 'r+');
if (flock($file, LOCK_EX)) {
$phpCoverage = unserialize(stream_get_contents($file));
} else {
__c3_error("Failed to acquire write-lock for $filename");
}
} else {
$phpCoverage = unserialize(file_get_contents($filename));
}
return array($phpCoverage, $file);
} else {
$phpCoverage = new PHP_CodeCoverage();
}
if (isset($_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_SUITE'])) {
$suite = $_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_SUITE'];
try {
$settings = \Codeception\Configuration::suiteSettings($suite, \Codeception\Configuration::config());
} catch (Exception $e) {
__c3_error($e->getMessage());
}
} else {
$settings = \Codeception\Configuration::config();
}
try {
\Codeception\Coverage\Filter::setup($phpCoverage)
->whiteList($settings)
->blackList($settings);
} catch (Exception $e) {
__c3_error($e->getMessage());
}
return array($phpCoverage, $file);
}
function __c3_exit()
{
if (!isset($_SERVER['HTTP_X_CODECEPTION_CODECOVERAGE_DEBUG'])) {
exit;
}
return null;
}
function __c3_clear()
{
\Codeception\Util\FileSystem::doEmptyDir(C3_CODECOVERAGE_MEDIATE_STORAGE);
}
}
if (!is_dir(C3_CODECOVERAGE_MEDIATE_STORAGE)) {
if (mkdir(C3_CODECOVERAGE_MEDIATE_STORAGE, 0777, true) === false) {
__c3_error('Failed to create directory "' . C3_CODECOVERAGE_MEDIATE_STORAGE . '"');
}
}
// evaluate base path for c3-related files
$path = realpath(C3_CODECOVERAGE_MEDIATE_STORAGE) . DIRECTORY_SEPARATOR . 'codecoverage';
$requestedC3Report = (strpos($_SERVER['REQUEST_URI'], 'c3/report') !== false);
$completeReport = $currentReport = $path . '.serialized';
if ($requestedC3Report) {
set_time_limit(0);
$route = ltrim(strrchr(rtrim($_SERVER['REQUEST_URI'], '/'), '/'), '/');
if ($route === 'clear') {
__c3_clear();
return __c3_exit();
}
list($codeCoverage, ) = __c3_factory($completeReport);
switch ($route) {
case 'html':
try {
__c3_send_file(__c3_build_html_report($codeCoverage, $path));
} catch (Exception $e) {
__c3_error($e->getMessage());
}
return __c3_exit();
case 'clover':
try {
__c3_send_file(__c3_build_clover_report($codeCoverage, $path));
} catch (Exception $e) {
__c3_error($e->getMessage());
}
return __c3_exit();
case 'crap4j':
try {
__c3_send_file(__c3_build_crap4j_report($codeCoverage, $path));
} catch (Exception $e) {
__c3_error($e->getMessage());
}
return __c3_exit();
case 'serialized':
try {
__c3_send_file($completeReport);
} catch (Exception $e) {
__c3_error($e->getMessage());
}
return __c3_exit();
case 'phpunit':
try {
__c3_send_file(__c3_build_phpunit_report($codeCoverage, $path));
} catch (Exception $e) {
__c3_error($e->getMessage());
}
return __c3_exit();
}
} else {
list($codeCoverage, ) = __c3_factory(null);
$codeCoverage->start(C3_CODECOVERAGE_TESTNAME);
if (!array_key_exists('HTTP_X_CODECEPTION_CODECOVERAGE_DEBUG', $_SERVER)) {
register_shutdown_function(
function () use ($codeCoverage, $currentReport) {
$codeCoverage->stop();
if (!file_exists(dirname($currentReport))) { // verify directory exists
if (!mkdir(dirname($currentReport), 0777, true)) {
__c3_error("Can't write CodeCoverage report into $currentReport");
}
}
// This will either lock the existing report for writing and return it along with a file pointer,
// or return a fresh PHP_CodeCoverage object without a file pointer. We'll merge the current request
// into that coverage object, write it to disk, and release the lock. By doing this in the end of
// the request, we avoid this scenario, where Request 2 overwrites the changes from Request 1:
//
// Time ->
// Request 1 [ <read> <write> ]
// Request 2 [ <read> <write> ]
//
// In addition, by locking the file for exclusive writing, we make sure no other request try to
// read/write to the file at the same time as this request (leading to a corrupt file). flock() is a
// blocking call, so it waits until an exclusive lock can be acquired before continuing.
list($existingCodeCoverage, $file) = __c3_factory($currentReport, true);
$existingCodeCoverage->merge($codeCoverage);
if ($file === null) {
file_put_contents($currentReport, serialize($existingCodeCoverage), LOCK_EX);
} else {
fseek($file, 0);
fwrite($file, serialize($existingCodeCoverage));
fflush($file);
flock($file, LOCK_UN);
fclose($file);
}
}
);
}
}
// @codeCoverageIgnoreEnd

View File

@ -13,7 +13,7 @@ settings:
coverage:
c3_url: 'http://localhost:8080/index-test.php'
enabled: true
remote: false
remote: true
include:
- ../actions/*
- ../controllers/*

View File

@ -16,7 +16,7 @@ modules:
- tests\codeception\_support\DynamicFixtureHelper
config:
WebDriver:
url: 'http://localhost:8080/'
url: 'http://localhost:8080/index-test.php'
window_size: maximize
browser: chrome
port: 4444

View File

@ -0,0 +1,28 @@
<?php
namespace humhub\modules\activity\tests\codeception\activities;
use Yii;
use yii\helpers\Url;
/**
* Description of TestActivity
*
* @author buddha
*/
class TestActivity extends \humhub\modules\activity\components\BaseActivity {
public $moduleId = 'test';
public $viewName = 'testNoView';
public function html()
{
return 'Content of no view activity';
}
public function getUrl()
{
return Url::toRoute(['/user/account/edit']);
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace humhub\modules\activity\tests\codeception\activities;
use Yii;
use yii\helpers\Url;
/**
* Description of TestActivity
*
* @author buddha
*/
class TestActivityDefaultLayout extends \humhub\modules\activity\components\BaseActivity {
public $moduleId = 'test';
public function html()
{
return 'Content of default layout activity';
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace humhub\modules\activity\tests\codeception\activities;
/**
* Description of TestActivity
*
* @author buddha
*/
class TestViewActivity extends \humhub\modules\activity\components\BaseActivity {
public $moduleId = 'test';
public $viewName = 'testWithView';
}

View File

@ -0,0 +1,8 @@
<?php
/* @var $this \humhub\components\View */
?>
<div>
<h1>My special activity view layout without view</h1>
<?= $content; ?>
</div>

View File

@ -0,0 +1,8 @@
<?php
/* @var $this \humhub\components\View */
?>
<div>
<h1>My special activity view layout</h1>
<?= $content; ?>
</div>

View File

@ -0,0 +1,5 @@
<?php
/* @var $this \humhub\components\View */
?>
<h2>My special activity view content</h2>

View File

@ -0,0 +1,57 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*
*/
namespace activity\functional;
use humhub\modules\activity\components\MailSummary;
use humhub\modules\activity\models\MailSummaryForm;
use humhub\modules\activity\tests\codeception\activities\TestActivity;
use humhub\modules\content\activities\ContentCreated;
use humhub\modules\post\models\Post;
use humhub\modules\user\models\User;
use activity\FunctionalTester;
class ActivityLinkCest
{
public function testSimpleActivityLink(FunctionalTester $I)
{
$I->wantTo('the activity link works');
$I->amAdmin();
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
'activities' => [ContentCreated::class]
]))->save();
$activity = TestActivity::instance()->about(Post::findOne(1))->create();
$I->amOnRoute('/activity/link', ['id' => $activity->record->id]);
$I->see('Account settings');
}
public function testNonViewableNotification(FunctionalTester $I)
{
$I->wantTo('the activity link works');
$I->amAdmin();
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
'activities' => [ContentCreated::class]
]))->save();
$activity = TestActivity::instance()->about(Post::findOne(1))->create();
$I->amUser1(true);
$I->amOnRoute('/activity/link', ['id' => $activity->record->id]);
$I->seeResponseCodeIs(403);
}
}

View File

@ -0,0 +1,70 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*
*/
namespace activity\functional;
use humhub\modules\comment\activities\NewComment;
use humhub\modules\content\activities\ContentCreated;
use humhub\modules\space\models\Space;
use activity\FunctionalTester;
use yii\helpers\Url;
class ActivitySettingsCest
{
public function testSimpleActivityLink(FunctionalTester $I)
{
$I->wantTo('the activity link works');
$I->amAdmin();
$I->amOnRoute('/activity/admin/defaults');
$I->submitForm('.panel-body form', [
'MailSummaryForm[interval]' => '1',
'MailSummaryForm[limitSpacesMode]' => '1',
'MailSummaryForm[limitSpaces][]' => Space::findOne(1)->guid,
'MailSummaryForm[activities]' => '',
'MailSummaryForm[activities][]' => ContentCreated::class
]);
$I->amOnRoute('/activity/user');
$I->seeInField('#mailsummaryform-interval', '1' );
$I->seeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '1');
$I->seeOptionIsSelected('#mailsummaryform-limitspaces', 'Space 1');
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\comment\activities\NewComment"]');
$I->seeCheckboxIsChecked('[value="humhub\modules\content\activities\ContentCreated"]');
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\like\activities\Liked"]');
$I->submitForm('.panel-body form', [
'MailSummaryForm[interval]' => '2',
'MailSummaryForm[limitSpacesMode]' => '',
'MailSummaryForm[limitSpaces][]' => '',
'MailSummaryForm[activities]' => '',
'MailSummaryForm[activities][]' => NewComment::class
]);
$I->seeInField('#mailsummaryform-interval', '2' );
$I->dontSeeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '0');
$I->dontSeeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '1');
$I->dontSeeOptionIsSelected('#mailsummaryform-limitspaces', 'Space 1');
$I->seeCheckboxIsChecked('[value="humhub\modules\comment\activities\NewComment"]');
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\content\activities\ContentCreated"]');
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\like\activities\Liked"]');
$I->see('Reset to defaults');
$I->sendAjaxPostRequest(Url::toRoute('/activity/user/reset'));
$I->amOnRoute('/activity/user');
$I->seeInField('#mailsummaryform-interval', '1' );
$I->seeCheckboxIsChecked('[name="MailSummaryForm[limitSpacesMode]"]', '1');
$I->seeOptionIsSelected('#mailsummaryform-limitspaces', 'Space 1');
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\comment\activities\NewComment"]');
$I->seeCheckboxIsChecked('[value="humhub\modules\content\activities\ContentCreated"]');
$I->dontSeeCheckboxIsChecked('[value="humhub\modules\like\activities\Liked"]');
}
}

View File

@ -3,12 +3,13 @@
namespace humhub\modules\activity\tests\codeception\unit;
use humhub\modules\activity\models\Activity;
use humhub\modules\activity\tests\codeception\activities\TestActivity;
use Yii;
use tests\codeception\_support\HumHubDbTestCase;
use Codeception\Specify;
use humhub\modules\post\models\Post;
class ActivityTestTest extends HumHubDbTestCase
class ActivityTest extends HumHubDbTestCase
{
use Specify;
@ -18,7 +19,7 @@ class ActivityTestTest extends HumHubDbTestCase
$this->becomeUser('User2');
$post = Post::findOne(['id' => 1]);
$activity = activities\TestActivity::instance()->from(Yii::$app->user->getIdentity())->about($post);
$activity = TestActivity::instance()->from(Yii::$app->user->getIdentity())->about($post);
// Test Originator
$this->assertEquals($activity->originator->id, Yii::$app->user->getIdentity()->id, 'Originator id before save');
@ -34,7 +35,7 @@ class ActivityTestTest extends HumHubDbTestCase
$activity->create();
$record = Activity::findOne(['class' => activities\TestActivity::class]);
$record = Activity::findOne(['class' => TestActivity::class]);
$this->assertEquals($record->module, 'test');
$source = $record->getPolymorphicRelation();
@ -56,7 +57,7 @@ class ActivityTestTest extends HumHubDbTestCase
public function testCreateActivityAboutOnly()
{
$post = Post::findOne(['id' => 1]);
$activity = activities\TestActivity::instance()->about($post)->create();
$activity = TestActivity::instance()->about($post)->create();
$this->assertEquals($post->content->created_by, $activity->record->content->created_by);
$activity = Activity::findOne(['id' => $activity->record->id]);

View File

@ -0,0 +1,46 @@
<?php
namespace humhub\modules\activity\tests\codeception\unit;
use humhub\modules\activity\tests\codeception\activities\TestActivityDefaultLayout;
use humhub\modules\activity\tests\codeception\activities\TestViewActivity;
use humhub\modules\activity\tests\codeception\activities\TestActivity;
use humhub\modules\post\models\Post;
use humhub\modules\user\models\User;
use tests\codeception\_support\HumHubDbTestCase;
class ActivityViewTest extends HumHubDbTestCase
{
public function testRenderStreamEntryWithActivityView()
{
$activity = TestViewActivity::instance()->from(User::findOne(['id' => 1]))
->about(Post::findOne(['id' => 1]))->create();
$this->assertNotNull($activity->record);
$wallout = $activity->record->getWallOut();
$this->assertContains('My special activity view layout', $wallout);
$this->assertContains('My special activity view content', $wallout);
}
public function testRenderStreamEntryWithActivityWithoutView()
{
$activity = TestActivity::instance()->from(User::findOne(['id' => 1]))
->about(Post::findOne(['id' => 1]))->create();
$this->assertNotNull($activity->record);
$wallout = $activity->record->getWallOut();
$this->assertContains('My special activity view layout without view', $wallout);
$this->assertContains('Content of no view activity', $wallout);
}
public function testRenderWithoutLayoutAndView()
{
$activity = TestActivityDefaultLayout::instance()->from(User::findOne(['id' => 1]))
->about(Post::findOne(['id' => 1]))->create();
$this->assertNotNull($activity->record);
$wallout = $activity->record->getWallOut();
$this->assertContains('Content of default layout activity', $wallout);
$this->assertContains('media-object img-rounded', $wallout);
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace humhub\modules\activity\tests\codeception\unit;
use humhub\modules\activity\models\Activity;
use humhub\modules\activity\tests\codeception\activities\TestActivity;
use humhub\modules\post\models\Post;
use tests\codeception\_support\HumHubDbTestCase;
class DeleteActivityTest extends HumHubDbTestCase
{
public function testDeleteRecord()
{
$post = Post::findOne(1);
$activity = TestActivity::instance()->about($post)->create();
$record = $activity->record;
$this->assertNotNull(Activity::findOne(['id' => $record->id]));
$post->delete();
$this->assertNull(Activity::findOne(['id' => $record->id]));
}
public function testDeleteOriginator()
{
$post = Post::findOne(1);
$activity = TestActivity::instance()->about($post)->create();
$record = $activity->record;
$this->assertNotNull(Activity::findOne(['id' => $record->id]));
$post->createdBy->delete();
$this->assertNull(Activity::findOne(['id' => $record->id]));
}
}

View File

@ -12,6 +12,7 @@ namespace humhub\modules\activity\tests\codeception\unit;
use Codeception\Module\Yii2;
use humhub\modules\activity\components\MailSummary;
use humhub\modules\activity\components\MailSummaryProcessor;
use humhub\modules\activity\jobs\SendMailSummary;
use humhub\modules\activity\models\MailSummaryForm;
use humhub\modules\comment\activities\NewComment;
use humhub\modules\comment\models\Comment;
@ -26,7 +27,168 @@ use yii\swiftmailer\Message;
class MailSummaryTest extends HumHubDbTestCase
{
public function testMailSummaryDaylyProcessor()
public function testHourlyProcess()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_HOURLY,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
MailSummaryProcessor::process(MailSummary::INTERVAL_HOURLY);
$this->assertMailSent(1);
/* @var $yiiModule Yii2 */
$yiiModule = $this->getModule('Yii2');
/* @var $mail Message */
$mail = $yiiModule->grabLastSentEmail();
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
$this->assertEquals('Latest news', $mail->getSubject());
}
public function testDailyProcess()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
MailSummaryProcessor::process(MailSummary::INTERVAL_DAILY);
$this->assertMailSent(1);
/* @var $yiiModule Yii2 */
$yiiModule = $this->getModule('Yii2');
/* @var $mail Message */
$mail = $yiiModule->grabLastSentEmail();
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
$this->assertEquals('Your daily summary', $mail->getSubject());
}
public function testWeeklyProcess()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_WEEKLY,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
MailSummaryProcessor::process(MailSummary::INTERVAL_WEEKLY);
$this->assertMailSent(1);
/* @var $yiiModule Yii2 */
$yiiModule = $this->getModule('Yii2');
/* @var $mail Message */
$mail = $yiiModule->grabLastSentEmail();
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
$this->assertEquals('Your weekly summary', $mail->getSubject());
}
public function testNoneProcess()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_NONE,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
MailSummaryProcessor::process(MailSummary::INTERVAL_NONE);
$this->assertMailSent(0);
}
public function testUserWithoutEmailProcessor()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
$user1 = User::findOne(['id' => 2]);
$user1->updateAttributes(['email' => null]);
MailSummaryProcessor::process(MailSummary::INTERVAL_DAILY);
$this->assertMailSent(0);
}
public function testProcessByJob()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_DAILY]));
$this->assertMailSent(1);
/* @var $yiiModule Yii2 */
$yiiModule = $this->getModule('Yii2');
/* @var $mail Message */
$mail = $yiiModule->grabLastSentEmail();
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
$this->assertEquals('Your daily summary', $mail->getSubject());
}
public function testInvalidProcessByJob()
{
$this->becomeUser('Admin');
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
'activities' => [ContentCreated::class]
]))->save();
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Daily Summary Test']);
$this->assertTrue($post->save());
Yii::$app->queue->push(new SendMailSummary(['interval' => MailSummary::INTERVAL_NONE]));
$this->assertMailSent(0);
}
public function testMailSummaryDailyProcessor()
{
$this->assertMailSent(0);
@ -34,16 +196,8 @@ class MailSummaryTest extends HumHubDbTestCase
$post = new Post(Space::findOne(['id' => 4]), ['message' => 'Summary Test']);
$this->assertTrue($post->save());
// Set Weekly Interval as default
(new MailSummaryForm(['interval' => MailSummary::INTERVAL_NONE]))->save();
// Get sure no one receives a mail
/*MailSummaryProcessor::process(MailSummary::INTERVAL_DAILY);
MailSummaryProcessor::process(MailSummary::INTERVAL_WEEKLY);
MailSummaryProcessor::process(MailSummary::INTERVAL_HOURLY);
$this->assertMailSent(0);*/
(new MailSummaryForm([
'user' => User::findOne(['id' => 2]),
'interval' => MailSummary::INTERVAL_DAILY,
@ -59,12 +213,12 @@ class MailSummaryTest extends HumHubDbTestCase
/* @var $mail Message */
$mail = $yiiModule->grabLastSentEmail();
$test = $mail->getTo();
$this->assertArrayHasKey('user1@example.com', $mail->getTo());
$this->assertEquals('Your daily summary', $mail->getSubject());
}
public function testResetUserSettings()
{
$user2 = User::findOne(['id' => 3]);

View File

@ -1,12 +0,0 @@
<?php
namespace humhub\modules\activity\tests\codeception\unit\activities;
/**
* Description of TestActivity
*
* @author buddha
*/
class TestActivity extends \humhub\modules\activity\components\BaseActivity {
public $moduleId = 'test';
}

View File

@ -8,6 +8,7 @@
namespace humhub\modules\activity\widgets;
use humhub\modules\activity\components\ActivityWebRenderer;
use Yii;
use humhub\modules\content\widgets\WallEntry;
use humhub\modules\content\components\ContentActiveRecord;
@ -26,7 +27,7 @@ class Activity extends WallEntry
protected $themePath = 'modules/activity';
/**
* @var Activity is the current activity object.
* @var \humhub\modules\activity\models\Activity is the current activity object.
*/
public $activity;
@ -40,56 +41,8 @@ class Activity extends WallEntry
*/
public function run()
{
// Possible Security Flaw: Check type!
$type = $this->activity->type;
$source = $this->activity->getSource();
// Try to figure out wallEntryId of this activity
$wallEntryId = 0;
if ($source != null) {
if ($source instanceof ContentActiveRecord || $source instanceof ContentAddonActiveRecord) {
$wallEntryId = $source->content->getFirstWallEntryId();
}
}
// When element is assigned to a workspace, assign variable
$space = null;
if ($this->activity->content->space_id != '') {
$space = $this->activity->content->space;
}
// User that fired the activity
$user = $this->activity->content->user;
if ($user == null) {
Yii::warning('Skipping activity without valid user', 'warning');
return;
}
// Dertermine View
if ($this->activity->module == '') {
$view = '@humhub/modules/activity/views/activities/' . $this->activity->type;
} else {
$module = Yii::$app->getModule($this->activity->module, true);
// Autogenerate Module Path
$path = str_replace(Yii::getAlias('@app'), '', $module->getBasePath());
$view = '@app/' . $path . '/views/activities/' . $this->activity->type;
}
// Activity Layout can access it
$this->wallEntryId = $wallEntryId;
return $this->render($view, [
'activity' => $this->activity,
'wallEntryId' => $wallEntryId,
'user' => $user,
'target' => $source,
'space' => $space,
]);
// The render logic is overwritten by models\Activity::getWallOut()
return '';
}
}

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