19 declare(strict_types=1);
68 public function __construct(
int $a_id,
bool $a_call_by_reference =
true)
73 $this->lang_path = $this->
lng->lang_path;
74 $this->lang_default = $this->
lng->lang_default;
75 $this->lang_user = $this->
lng->lang_user;
76 $this->separator = $this->
lng->separator;
95 $this->
lng->loadLanguageModule(
"meta");
98 $d = dir($this->lang_path);
100 chdir($this->lang_path);
105 while ($entry =
$d->read()) {
106 if (is_file($entry) && (preg_match(
"~(^ilias_.{2}\.lang$)~", $entry))) {
107 $lang_key = substr($entry, 6, 2);
108 $languages[$lang_key] =
"";
113 $tmp_array = array_keys($languages);
114 $lang_keys = array();
118 foreach ($lang_db as
$lang) {
120 $lang_key = $lang[
"title"];
121 $languages[$lang_key] =
$lang;
122 $lang_keys[] = $lang_key;
124 $languages[$lang_key][
"info"] =
"";
125 $languages[$lang_key][
"status"] =
"";
128 if ($lang_key === $this->lang_user) {
129 $languages[$lang_key][
"status"] =
"in_use";
132 if ($lang_key === $this->lang_default) {
133 $languages[$lang_key][
"status"] =
"system_language";
137 if (count($tmp_array) > 0 && !in_array($lang_key, $tmp_array,
true)) {
138 $languages[$lang_key][
"info"] =
"file_not_found";
144 foreach ($languages as $lang_key => $lang_data) {
145 if (!in_array($lang_key, $lang_keys,
true)) {
146 $languages[$lang_key] = array();
147 $languages[$lang_key][
"info"] =
"new_language";
161 foreach ($languages as $lang_key => $lang_data) {
162 $languages[$lang_key][
"name"] = $this->
lng->txt(
"meta_l_" . $lang_key);
178 if (count($a_languages) > 0) {
179 foreach ($a_languages as $lang_key => $lang_data) {
180 if (isset($lang_data[
"info"]) && $lang_data[
"info"] ===
"new_language") {
181 include_once
"./Services/Language/classes/class.ilObjLanguage.php";
183 $lngObj->setTitle($lang_key);
184 $lngObj->setDescription(
"not_installed");
189 $a_languages[$lang_key] = array(
"obj_id" => $lngObj->getId(),
190 "type" => $lngObj->getType(),
191 "description" => $lngObj->getDescription(),
192 "desc" => $lngObj->getDescription(),
193 "owner" => $lngObj->getOwner(),
194 "create_date" => $lngObj->getCreateDate(),
195 "last_update" => $lngObj->getLastUpdateDate());
197 $a_languages[$lang_key][
"info"] =
"new_language";
216 foreach ($a_languages as $lang_key => $lang_data) {
217 if ($lang_data[
"desc"] ===
"not_installed" && $lang_data[
"info"] ===
"file_not_found") {
219 unset($a_languages[$lang_key]);
222 $query =
"DELETE FROM object_data " .
223 "WHERE type = " . $this->db->quote(
"lng",
"text") .
" " .
224 "AND title = " . $this->db->quote($lang_key,
"text");
225 $this->db->manipulate(
$query);
243 $d = dir($this->lang_path);
245 chdir($this->lang_path);
252 while ($entry =
$d->read()) {
253 if (is_file($entry) && (preg_match(
"~(^ilias_.{2}\.lang$)~", $entry))) {
255 $output .=
"<br/><br/>" . $this->
lng->txt(
"langfile_found") .
": " . $entry;
256 $content = file($entry);
257 $lines_full = count($content);
259 $error_param =
false;
260 $error_double =
false;
261 $double_checker = [];
264 $lines_cut = count($content);
265 foreach ($content as
$key => $val) {
266 $separated = explode($this->separator, trim($val));
267 $num = count($separated);
268 $line =
$key + $lines_full - $lines_cut + 1;
273 $output .=
"<br/><b/>" . $this->
lng->txt(
"err_in_line") .
" " . $line .
" !</b> ";
277 if (empty($separated[0])) {
278 $output .=
"<br/>" . $this->
lng->txt(
"err_no_param") .
" " . $this->
lng->txt(
"check_langfile");
280 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
281 $output .=
"<br/>" . $this->
lng->txt(
"err_1_param") .
" " . $this->
lng->txt(
"check_langfile");
286 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
287 $output .=
", " . $this->
lng->txt(
"identifier") .
": " . $separated[1];
288 $output .=
"<br/>" . $this->
lng->txt(
"err_2_param") .
" " . $this->
lng->txt(
"check_langfile");
292 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
293 $output .=
", " . $this->
lng->txt(
"identifier") .
": " . $separated[1];
294 $output .=
", " . $this->
lng->txt(
"value") .
": " . $separated[2];
295 $output .=
"<br/>" . $this->
lng->txt(
"err_over_3_param") .
" " . $this->
lng->txt(
"check_langfile");
300 if ($double_checker[strtolower($separated[0])][strtolower($separated[1])] ??
false) {
301 $error_double =
true;
303 $output .=
"<br/><b/>" . $this->
lng->txt(
"err_in_line") .
" " . $double_checker[strtolower($separated[0])][strtolower($separated[1])] .
" " . $this->
lng->txt(
"and") .
" " . $line .
" !</b> ";
304 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
305 $output .=
", " . $this->
lng->txt(
"identifier") .
": " . $separated[1];
306 $output .=
", " . $this->
lng->txt(
"value") .
": " . $separated[2];
308 $double_checker[strtolower($separated[0])][strtolower($separated[1])] = $line;
311 if ($error_param || $error_double) {
314 $reason .=
" " . $this->
lng->txt(
"err_count_param");
317 $reason .=
" " . $this->
lng->txt(
"err_double_entries");
319 $output .=
"<br/>" . $this->
lng->txt(
"file_not_valid") .
$reason;
321 $output .=
"<br/>" . $this->
lng->txt(
"file_valid");
324 $output .=
"<br/>" . $this->
lng->txt(
"file_not_valid") .
" " . $this->
lng->txt(
"err_wrong_header");
332 $output .=
"<br/>" . $this->
lng->txt(
"err_no_langfile_found");
string $lang_default
indicator for the system language this language must not be deleted
static _getObjectsByType(string $obj_type="", int $owner=null)
string $lang_user
language that is in use by current user this language must not be deleted
__construct(int $a_id, bool $a_call_by_reference=true)
Constructor $a_id reference_id or object_id $a_call_by_reference treat the id as reference_id (true) ...
string $separator
separator value between module,identivier & value
getLanguages()
gather all information about available languages
removeLanguages(array $a_languages)
remove languages which are not installed AND has no lang-file
array $languages
contians all informations about languages
Class ilObjLanguageFolder contains all function to manage language support for ILIAS3 install...
__construct(Container $dic, ilPlugin $plugin)
string $lang_path
path to language files relative path is taken from ini file and added to absolute path of ilias ...
static cut_header(array $content)
remove lang-file haeder information from '$content' This function seeks for a special keyword where t...
for($i=6; $i< 13; $i++) for($i=1; $i< 13; $i++) $d
addNewLanguages(array $a_languages)
add new languages
checkAllLanguages()
validate the logical structure of a lang-file