Transliteration provides one-way string transliteration (romanization) and cleans text by replacing unwanted characters., (*1)
...it takes Unicode text and tries to represent it in US-ASCII characters (universally displayable, unaccented characters) by attempting to transliterate the pronunciation expressed by the text in some other writing system to Roman letters., (*2)
This adapts the module from https://drupal.org/project/transliteration for use with Laravel., (*3)
*, (*4)
Install the package via Composer:, (*5)
composer require that0n3guy/transliteration
Depending on your version of Laravel, you should install a different version of the package., (*6)
Laravel Version | Package Version |
---|---|
10.0 | ^2.0 |
9.0 | ^2.0 |
8.0 | ^2.0 |
7.0 | ^2.0 |
6.0 | ^2.0 |
5.0 | ^2.0 |
4.0 | ^1.0 |
In your config/app.php
add 'That0n3guy\Transliteration\TransliterationServiceProvider'
to the end of the $providers
array, (*7)
'providers' => array( 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 'Illuminate\Auth\AuthServiceProvider', ... 'That0n3guy\Transliteration\TransliterationServiceProvider', ),
Simply call the Transliteration class:, (*8)
Route::get('/test', function(){ echo Transliteration::clean_filename('test& ® is true'); });
This would return test_r_is_true
, (*9)
You can optionally set a Optional ISO 639 language code. Do it like so:, (*10)
Route::get('/test', function(){ echo Transliteration::clean_filename('testing Japanese 日本語', 'jpn'); });
This would return testing_Japanese_Ri_Ben_Yu_
., (*11)
This is an old example, but still relevant. It uses Cabinet which I don't really recommend using anymore since there are better options., (*12)
Add something like:, (*13)
// if using transliteration if (class_exists( 'That0n3guy\Transliteration\Transliteration' )) { $file->fileSystemName = Transliteration::clean_filename($file->getClientOriginalName()); // You can see I am cleaning the filename }
To your Upload controller. For example. I added it to my UploadController.php and my store() method looks like so:, (*14)
/** * Stores new upload * */ public function store() { $file = Input::file('file'); // if using transliteration if (class_exists( 'That0n3guy\Transliteration\Transliteration' )) { $file->fileSystemName = Transliteration::clean_filename($file->getClientOriginalName()); } $upload = new Upload; try { $upload->process($file); } catch(Exception $exception){ // Something went wrong. Log it. Log::error($exception); $error = array( 'name' => $file->getClientOriginalName(), 'size' => $file->getSize(), 'error' => $exception->getMessage(), ); // Return error return Response::json($error, 400); } // If it now has an id, it should have been successful. if ( $upload->id ) { ...
Create a plugin, for this example I'll call it that0n3guy.drivers
. You can see documentation here: https://octobercms.com/docs/console/scaffolding#scaffold-create-plugin, (*15)
Add a bootPackages method to your Plugin.php
as per the instructions here (copy/paste it straight from that page):
https://luketowers.ca/blog/how-to-use-laravel-packages-in-october-cms-plugins/, (*16)
Add that0n3guy/transliteration
to your plugins composer.json file:, (*17)
"require": { "that0n3guy/transliteration": "^2.0" }
Create a config file in your plugins config folder (create this folder) just like https://luketowers.ca/blog/how-to-use-laravel-packages-in-october-cms-plugins/. File structure example:, (*18)
that0n3guy drivers config config.php Plugin.php
The config file should contain:, (*19)
<?php use Illuminate\Support\Facades\Config; $config = [ // This contains the Laravel Packages that you want this plugin to utilize listed under their package identifiers 'packages' => [ 'that0n3guy/transliteration' => [ 'providers' => [ '\That0n3guy\Transliteration\TransliterationServiceProvider', ], 'aliases' => [ 'Transliteration' => '\That0n3guy\Transliteration\Facades\Transliteration', ], ], ], ]; return $config;
Now you can use transliteration facade anywhere in your octobercms php code (like in the docs above)., (*20)