Wallogit.com
2017 © Pedro Peláez
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)