Commit b630f44a authored by Dominik Hebeler's avatar Dominik Hebeler
Browse files

WIP: Ein großer Teil der Logik wurde eingebaut

1. Es gibt nun eine Übersicht über die verfügbaren Sprachen und zu welchem Anteil diese bereits übersetzt sind
2. Es gibt eine Seite, die fehlende Texte erkennt und eine Seite zum Bearbeiten erstellt
parent e51c255a
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
class LanguageController extends Controller
{
public function createOverview(Request $request)
{
$languageFilePath = resource_path() . "/lang/";
$files = scandir($languageFilePath);
$dirs = [];
foreach ($files as $file) {
if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
$dirs[] = $file;
}
}
# Im Array "$dirs" haben wir nun alle Verzeichnisse mit dem entsprechenden Sprachkürzel
# Alle von uns bislang unterstützen Sprachen sind hier eingetragen.
$langTexts = [];
$sum = [];
foreach ($dirs as $dir) {
# Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
$di = new RecursiveDirectoryIterator($languageFilePath . $dir);
$langTexts[$dir]["textCount"] = 0;
$langTexts[$dir]["fileCount"] = 0;
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
if (!$this->endsWith($filename, ".")) {
$langTexts[$dir]["fileCount"] += 1;
$tmp = include $filename;
foreach ($tmp as $key => $value) {
$sum = array_add($sum, str_replace(".php", "", basename($filename)) . str_replace(".", "", $key), 1);
}
$langTexts[$dir]["textCount"] += count($tmp);
}
}
}
$deComplete = $langTexts["de"]["textCount"] === count($sum) ? true : false;
return view('languages.overview')
->with('title', trans('titles.languages'))
->with('langTexts', $langTexts)
->with('sum', $sum)
->with('deComplete', $deComplete);
}
public function createEditPage($from, $to)
{
$languageFilePath = resource_path() . "/lang/";
$files = scandir($languageFilePath);
$dirs = [];
foreach ($files as $file) {
if (is_dir($languageFilePath . $file) && $file !== "." && $file !== "..") {
$dirs[$file] = $file;
}
}
# Abbruchbedingungen:
if ($from === "" || $to === "" || ($from !== "de" && $from !== "all") || ($from === "all" && $to !== "de") && !array_has($dirs, $to)) {
return redirect(url('languages'));
}
$texts = [];
foreach ($dirs as $dir) {
if ($from !== "all" && $dir !== $to && $dir !== $from) {
continue;
}
# Wir überprüfen nun für jede Datei die Anzahl der vorhandenen Übersetzungen
$di = new RecursiveDirectoryIterator($languageFilePath . $dir);
$langTexts[$dir]["textCount"] = 0;
$langTexts[$dir]["fileCount"] = 0;
foreach (new RecursiveIteratorIterator($di) as $filename => $file) {
if (!$this->endsWith($filename, ".")) {
$langTexts[$dir]["fileCount"] += 1;
$tmp = include $filename;
foreach ($tmp as $key => $value) {
$texts[basename($filename)][$key][$dir] = $value;
}
}
}
}
$langs = [];
$fn = "";
$t = "";
foreach ($texts as $filename => $texts) {
# Hier können wir später die bereits bearbeiteten Dateien ausschließen.
foreach ($texts as $textname => $languages) {
foreach ($languages as $lang => $value) {
if ($lang !== $to) {
$langs = array_add($langs, $lang, $lang);
}
}
if (!isset($languages[$to])) {
$fn = $filename;
$t = $texts;
break;
}
}
}
return view('languages.edit')
->with('texts', $t)
->with('filename', $fn)
->with('title', trans('titles.languages.edit'))
->with('langs', $langs)
->with('to', $to);
}
private function startsWith($haystack, $needle)
{
// search backwards starting from haystack length characters from the end
return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false;
}
private function endsWith($haystack, $needle)
{
// search forward starting from end minus needle length characters
return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false);
}
}
......@@ -115,15 +115,14 @@ Route::group(
return view('hilfe')
->with('title', trans('titles.hilfe'))
->with('css', 'help.css')
->with('navbarFocus', 'hilfe');
});
->with('navbarFocus', 'hilfe');
});
Route::get('faq', function()
{
return view('faq')
->with('title', trans('titles.faq'))
->with('css', 'help.css')
->with('navbarFocus', 'hilfe');
Route::get('faq', function () {
return view('faq')
->with('title', trans('titles.faq'))
->with('css', 'help.css')
->with('navbarFocus', 'hilfe');
});
Route::get('widget', function () {
......@@ -160,4 +159,6 @@ Route::group(
Route::get('owi', function () {
return redirect('https://metager.de/klassik/en/owi/');
});
Route::get('languages', 'LanguageController@createOverview');
Route::get('languages/edit/{from}/{to}/{exclude?}', 'LanguageController@createEditPage');
});
......@@ -2,12 +2,8 @@
@section('title', $title )
@section('navbarFocus.search', 'class="active"')
@section('navbarFocus.donate', 'class="dropdown"')
@section('content')
<div class="modal fade" id="plugin-modal" tab-index="-1" role="dialog">
<div class="modal fade" id="plugin-modal" tab-index="-1" role="dialog">
<div class="modal-dialog ">
<div class="content modal-content">
<div class="modal-header">
......@@ -111,7 +107,7 @@
</div>
</div>
</div>
<h1 id="mglogo">
<h1 id="mglogo">
<a class="hidden-xs" href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), "/") }}">MetaGer
</a>
</h1>
......@@ -226,7 +222,7 @@
</li>
</ul>
</figure>
@endsection
@section('optionalContent')
......
@extends('layouts.subPages')
@section('title', $title )
@section('content')
<h1>{{$filename}}</h1>
<table class="table">
<thead>
<tr>
<th>#ID</th>
<th>{{$to}}
@foreach($langs as $lang => $value)
<th>{{$lang}}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach($texts as $name => $langValues)
<tr>
<td>{{$name}}</td>
<td>{!! $langValues[$to] or '<input type="text" size="50"/>'!!}</td>
@foreach($langs as $lang => $value)
<td>{{ $langValues[$lang] or "" }}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
@endsection
@extends('layouts.subPages')
@section('title', $title )
@section('content')
@if(!$deComplete)
<p>Hinweis: Es sind nicht alle Texte für die Referenzsprache(deutsch) vorhanden. Das Bearbeiten der Sprachdateien ist auf die deutsche begrenzt, bis diese komplett ist.</p>
@endif
<table class="table">
<thead>
<tr>
<th>Sprachkürzel</th>
<th>Status</th>
<th>Aktion</th>
</tr>
</thead>
<tbody>
@foreach($langTexts as $lang => $values)
<tr @if(floor(($values['textCount'] / count($sum)) * 100) < 100) class="danger" @else class="success" @endif>
<td>{{$lang}}</td>
<td>{{ $values['textCount'] . "/" . count($sum)}} Texten übersetzt. ({{ floor(($values['textCount'] / count($sum)) * 100) }} %)</td>
<td><a href="{{ LaravelLocalization::getLocalizedURL(LaravelLocalization::getCurrentLocale(), url("/languages/edit", ['from'=>'all', 'to'=>'de'])) }}" class="btn btn-default @if(!$deComplete && $lang !== "de" || floor(($values['textCount'] / count($sum)) * 100) === 100) disabled @endif">Texte für "{{ $lang }}" ergänzen</a></td>
</tr>
@endforeach
</tbody>
</table>
@endsection
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment