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") {
182 $lngObj->setTitle($lang_key);
183 $lngObj->setDescription(
"not_installed");
188 $a_languages[$lang_key] = array(
"obj_id" => $lngObj->getId(),
189 "type" => $lngObj->getType(),
190 "description" => $lngObj->getDescription(),
191 "desc" => $lngObj->getDescription(),
192 "owner" => $lngObj->getOwner(),
193 "create_date" => $lngObj->getCreateDate(),
194 "last_update" => $lngObj->getLastUpdateDate());
196 $a_languages[$lang_key][
"info"] =
"new_language";
215 foreach ($a_languages as $lang_key => $lang_data) {
216 if ($lang_data[
"desc"] ===
"not_installed" && $lang_data[
"info"] ===
"file_not_found") {
218 unset($a_languages[$lang_key]);
221 $query =
"DELETE FROM object_data " .
222 "WHERE type = " . $this->db->quote(
"lng",
"text") .
" " .
223 "AND title = " . $this->db->quote($lang_key,
"text");
224 $this->db->manipulate($query);
242 $d = dir($this->lang_path);
244 chdir($this->lang_path);
251 while ($entry =
$d->read()) {
252 if (is_file($entry) && (preg_match(
"~(^ilias_.{2}\.lang$)~", $entry))) {
254 $output .=
"<br/><br/>" . $this->
lng->txt(
"langfile_found") .
": " . $entry;
255 $content = file($entry);
256 $lines_full = count($content);
258 $error_param =
false;
259 $error_double =
false;
260 $double_checker = [];
263 $lines_cut = count($content);
264 foreach ($content as $key => $val) {
265 $separated = explode($this->separator, trim($val));
266 $num = count($separated);
267 $line = $key + $lines_full - $lines_cut + 1;
272 $output .=
"<br/><b/>" . $this->
lng->txt(
"err_in_line") .
" " . $line .
" !</b> ";
276 if (empty($separated[0])) {
277 $output .=
"<br/>" . $this->
lng->txt(
"err_no_param") .
" " . $this->
lng->txt(
"check_langfile");
279 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
280 $output .=
"<br/>" . $this->
lng->txt(
"err_1_param") .
" " . $this->
lng->txt(
"check_langfile");
285 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
286 $output .=
", " . $this->
lng->txt(
"identifier") .
": " . $separated[1];
287 $output .=
"<br/>" . $this->
lng->txt(
"err_2_param") .
" " . $this->
lng->txt(
"check_langfile");
291 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
292 $output .=
", " . $this->
lng->txt(
"identifier") .
": " . $separated[1];
293 $output .=
", " . $this->
lng->txt(
"value") .
": " . $separated[2];
294 $output .=
"<br/>" . $this->
lng->txt(
"err_over_3_param") .
" " . $this->
lng->txt(
"check_langfile");
299 if ($double_checker[strtolower($separated[0])][strtolower($separated[1])] ??
false) {
300 $error_double =
true;
302 $output .=
"<br/><b/>" . $this->
lng->txt(
"err_in_line") .
" " . $double_checker[strtolower($separated[0])][strtolower($separated[1])] .
" " . $this->
lng->txt(
"and") .
" " . $line .
" !</b> ";
303 $output .= $this->
lng->txt(
"module") .
": " . $separated[0];
304 $output .=
", " . $this->
lng->txt(
"identifier") .
": " . $separated[1];
305 $output .=
", " . $this->
lng->txt(
"value") .
": " . $separated[2];
307 $double_checker[strtolower($separated[0])][strtolower($separated[1])] = $line;
310 if ($error_param || $error_double) {
313 $reason .=
" " . $this->
lng->txt(
"err_count_param");
316 $reason .=
" " . $this->
lng->txt(
"err_double_entries");
318 $output .=
"<br/>" . $this->
lng->txt(
"file_not_valid") . $reason;
320 $output .=
"<br/>" . $this->
lng->txt(
"file_valid");
323 $output .=
"<br/>" . $this->
lng->txt(
"file_not_valid") .
" " . $this->
lng->txt(
"err_wrong_header");
331 $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...
addNewLanguages(array $a_languages)
add new languages
checkAllLanguages()
validate the logical structure of a lang-file