言語ファイルの編集管理がウェブインターフェースで可能になるらしい。まだ試してないけど覚え書きリンク。
GitHub – barryvdh/laravel-translation-manager: Manage Laravel translation files
https://github.com/barryvdh/laravel-translation-manager
最近はウェブ系アプリ中心、あとWindowsアプリちょっと
言語ファイルの編集管理がウェブインターフェースで可能になるらしい。まだ試してないけど覚え書きリンク。
GitHub – barryvdh/laravel-translation-manager: Manage Laravel translation files
https://github.com/barryvdh/laravel-translation-manager
この記事のおかげで、多言語サイト実現のための言語切り替えをどうやって仕込もうかと悩んでいたのが一気に解決した。ありがたや。
Laravel 5 And His F*cking non-persistent App SetLocale
http://mydnic.be/post/laravel-5-and-his-fcking-non-persistent-app-setlocale
1 |
$ php artisan make:controller LanguageController |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Http\Requests; use Config; use Illuminate\Http\Request; use Illuminate\Support\Facades\Redirect; use Illuminate\Support\Facades\Session; class LanguageController extends Controller { public function switchLang($lang) { if (array_key_exists($lang, Config::get('languages'))) { Session::set('applocale', $lang); } return Redirect::back(); } } |
config/languages.php
1 2 3 4 |
return [ 'en' => 'English', 'fr' => 'Français', ]; |
routes.php
1 |
Route::get('lang/{lang}', ['as'=>'lang.switch', 'uses'=>'LanguageController@switchLang']); |
front-end
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> {{ Config::get('languages')[App::getLocale()] }} </a> <ul class="dropdown-menu"> @foreach (Config::get('languages') as $lang => $language) @if ($lang != App::getLocale()) <li> <a href="{{ route('lang.switch', $lang) }}">{{$language}}</a> </li> @endif @endforeach </ul> </li> |
app/Http/Middleware/Language.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
namespace App\Http\Middleware; use Closure; use Illuminate\Foundation\Application; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Session; class Language { public function handle($request, Closure $next) { if (Session::has('applocale') AND array_key_exists(Session::get('applocale'), Config::get('languages'))) { App::setLocale(Session::get('applocale')); } else { // This is optional as Laravel will automatically set the fallback language if there is none specified App::setLocale(Config::get('app.fallback_locale')); } return $next($request); } } |
Kernel.php
1 2 3 4 5 6 7 8 9 10 11 12 |
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \App\Http\Middleware\Language::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], // ... ]; |
基本的な方法は公式ドキュメントに網羅されている。
Localization – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/localization
実践的には以下を自前で用意しないといけなさそう。
Inversion of Control Containers and the Dependency Injection pattern
http://www.martinfowler.com/articles/injection.html
(翻訳) Inversion of Control コンテナと Dependency Injection パターン
http://kakutani.com/trans/fowler/injection.html
制御の反転 – Wikipedia
https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%81%AE%E5%8F%8D%E8%BB%A2
Laravel4、IoCコンテナの魔術
http://kore1server.com/146
Laravel IoC コンテナの使い方 – Shin x blog
http://www.1×1.jp/blog/2014/02/how-to-use-ioc-container-in-laravel.html
Laravel5 – もっと強力的なIoC (4th) – Qiita
http://qiita.com/fluke8259/items/99d019a1a8a9f32508b2
Iocコンテナについて
http://www.slideshare.net/trtraki/ioc-48749471
依存性の注入 – Wikipedia
https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5
派遣労働者から見た、「まずはこう使え、DIコンテナ」 – Qiita
http://qiita.com/morisuke/items/fcd9027eb5250c30dbba
Laravel4、依存注入とコンテナ(1)
http://kore1server.com/184
なのでメモ。あと、同じく5.2で追加されたmulti-authも良さげ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ php artisan make:auth Created View: /home/vagrant/Code/Laravel/resources/views/auth/login.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/auth/register.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/auth/passwords/email.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/auth/passwords/reset.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/auth/emails/password.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/layouts/app.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/home.blade.php Created View: /home/vagrant/Code/Laravel/resources/views/welcome.blade.php Installed HomeController. Updated Routes File. Authentication scaffolding generated successfully! $ |
Authentication – Laravel – The PHP Framework For Web Artisans
https://laravel.com/docs/5.2/authentication
最近のPHPの変化はめざましい。キャッチアップするべく覚え書きリンク。
PHP 5.3: 新機能 – Manual
http://php.net/manual/ja/migration53.new-features.php
PHP 5.4: 新機能 – Manual
http://php.net/manual/ja/migration54.new-features.php
PHP 5.5: 新機能 – Manual
http://php.net/manual/ja/migration55.new-features.php
PHP 5.6: 新機能 – Manual
http://php.net/manual/ja/migration56.new-features.php
PHP 7.0: 新機能 – Manual
http://php.net/manual/ja/migration70.new-features.php
MediaInfo
http://mediaarea.net/en/MediaInfo
最近動画形式に混乱気味なので、基本的なところから復習しとく。
インターレース方式とプログレッシブ方式の違いは?|映像部
http://eizo-bu.com/question/scan.php
インターレース方式とプログレッシブ方式 | みるみるコラム | TOA株式会社
http://www.toa.co.jp/miru2/column/column6.htm
この先使うかもしれないのでスニペット覚え書き。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace TestApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected void DragEnterHandler(object s, DragEventArgs e) { e.Effect = DragDropEffects.All; } protected void DragDropHandler(object s, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { foreach (string fileName in (string[])e.Data.GetData(DataFormats.FileDrop)) { MessageBox.Show(fileName); } } } private void Form1_Load(object sender, EventArgs e) { this.AllowDrop = true; this.DragEnter += new DragEventHandler(DragEnterHandler); this.DragDrop += new DragEventHandler(DragDropHandler); } } } |
.NETにCrypt Service Providerっていうのがある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
using System.IO; using System.Security.Cryptography; string calcMD5(string fileName) { byte[] hash; using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); hash = md5.ComputeHash(fs); md5.Clear(); } StringBuilder hashStr = new StringBuilder(); foreach (byte c in hash) { hashStr.Append(c.ToString("X2")); } return hashStr.ToString(); } string calcSHA1(string fileName) { byte[] hash; using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); hash = sha1.ComputeHash(fs); sha1.Clear(); } StringBuilder hashStr = new StringBuilder(); foreach (byte c in hash) { hashStr.Append(c.ToString("X2")); } return hashStr.ToString(); } |
ファイルのMD5やSHA1などでハッシュ値を計算する: .NET Tips: C#, VB.NET
http://dobon.net/vb/dotnet/string/filemd5.html