2019年10月8日火曜日

WEBサイトの国際化、多国語化を実現する slang.js

「IT後進国」とまで言われるようになった日本ですが、いろいろな原因や要素があるのだと思います。
エコノミストではありませんので具体的な指摘なんかできないんですが、いわゆる『ホームページ』というのに、その片鱗があるような気がします。

お仕事でお役所とか企業様とかの『ホームページ』を編集したりすることがあるのですが、多くの方が、必要な情報を『ホームページ』に掲載した時点で(広く)公開した気になっていらっしゃいます。
実際には、メンテナンスしたページを一般の方が目にすることになるのかどうかはわからないのに。

『ホームページ』の意義とか役割を考えると、むしろ、商品やサービス、技術を広く公開できてナンボという世界だと思うのです。

日本の人口から考えると、日本語のWEBサイトを見てくれるのは、ほとんどが日本人になりますね。
海外でどのような言語が使われているかを考えると、英語でのWEBサイト提供は、これから先必須になってくると思います。

もちろん、諸外国からのアクセスでも、google翻訳がとっても役に立つようになっているのは事実です。

翻訳エンジンの精度は以前に比べるとものすごく素晴らしくなっています。
日本語のWEBサイトを英語や中国語に翻訳するのも、google のAPIを使って、すこぶる簡単に実現できる時代になっていますね。

まーでも、コンテンツの内容がどのように変換されるのかを担保できないというスタンスでは、WEBサイトを google翻訳に頼ってしまうことには躊躇する担当者も多いのではないでしょうか?
どこぞの国で書かれたマニュアルなんかが笑いものにされていたのと同じような世界になるのは避けたいものです。

そこで、WEBサイトを他国語に翻訳できるような仕組みがないものかと探してみましたら、こんなのを見つけました。

http://www.openxrest.com/translatejs/
(日本語の解説サイト)
https://webkaru.net/jquery-plugin/translate/

WEBサイトの訪問者は、言語選択ボタンでお好みの言語に変えてもらう、というおなじみの形式です。
そこ、なんか違うなーと思うんです。

英語版のOSで英語版のブラウザを使ってサイトを訪問してくる方って、英語でページを見たいと思うと思います。
日本語なんか読めませんし、どうかすると文字化けしてるかもしれません。
そんなページの右上に「English」と書かれたボタンみたいなところを見つけてクリックしてくれると、そこで初めて自分にも読める文章が現れる、というスンポー。
あまり良いインターフェースとは思えないんですね。

ブラウザに使用言語の設定があって、javascriptで取得できるようになってますから、そいつを利用するようにすれば問題解決です。

それに、上記の translate.js を使う場合、同一コンテンツの中に複数の言語リソースを含めなきゃいけないのもメンテナンス性を損なってると思うんです。

WEBサイトを英語で記述しておいて、ブラウザで設定される言語が英語以外の場合、対象となる翻訳情報を読み込んで表示させる。
そんな仕組みがあってもいいんじゃないでしょうか。


ということで、javascriptを使って書いてみました。

slang.js

今、会社の膨大なページをコツコツと英語に対応しようとしてます・・・

2019年7月30日火曜日

VisualStudioで既存のフォルダをプロジェクトに追加する

諸事情で(謎)、VisualStudio 2015 を使い続けてます。
他のプロジェクトをコピーして新しいプロジェクトとして再構築しようとする際にフォルダ配下のファイルをプロジェクトに追加するとフォルダーなしでプロジェクトに追加されてしまいます。

でもって、新規フォルダで同名のフォルダを追加しようとするとエラー。

WEBを検索すると、エクスプローラからソリューションエクスプローラにフォルダをドラッグ&ドロップするとうまくいくとの記述を見ますが、こちらの環境ではうまく動いてくれません。

ということで、以下の手続きでフォルダを追加しました。

1.VisualStudio を終了
2.目的のプロジェクトの .csproj ファイルをエディタで開く
3.以下の記述を追加
<ItemGroup>
<Folder Include="フォルダ名\" />
</ItemGroup&lgt;
4.保存終了して .sln を開く。

無事フォルダが追加されます。
既存ファイルを追加すると、上記の Folder Include は消えてなくなります。

本題に関係ありませんが、エクスプローラがとてもよく落ちてしまうようになって、ストレスまっくすな状態です。
こっちを何とかしたいw

2019年6月11日火曜日

XML HTTP Request status 12157

WEBサーバーへの問合せにXML応答をするよう構築しているのですが、とある企業様から
Response status:12157
と表示されてエラーになる!とのご指摘がありました。

10,000を超えるユーザーが同じ処理を利用しているのに、この企業様のコンピュータからはエラーが表示されて失敗するとおっしゃるのです。
そこで HTTP Request 12157 のキーワードでいろいろと調べてみますと、最終的にこの部分が該当するのではないか、となったわけです。

https://support.microsoft.com/ja-jp/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-wi

ところが、企業様ではTLS 1.1, 1.2 ともに有効だから関係ない!とおっしゃる。

さらに調べると、公開鍵や秘密鍵のやり取りうんぬんが必要とか出てきて、わけわかめ状態になってしまいました。

企業様に、APIのあるサイトにテストCGIを用意してアクセスをお願いしてみましたら、原因がわかりました。

WEBサーバーのアドレスがファイアウォールのブラックリストに追加されていたのだそうです。

ホワイトリストに追加していただくことで問題が解決しました。

でも、ちょっと待て!
なぜにうちのサーバーがブラックなの?
とお問い合わせしてみましたら、「パークドメイン」だからなのだそうです。

たしかにAPI専用のサーバで、WEBコンテンツは公開してないけど・・・
今後のためにWEBコンテンツを配置しておいたほうがいいのかな・・・

2019年1月21日月曜日

Perl uri_unescape で文字化け

実は文字化けにはその後も苦しんでおりまして。
原因となる現象をようやく突き止めましたのでサンプルプログラムを公開しますね。

use Carp::Heavy;
use strict;
use URI::Escape;
use Encode;
use encoding 'utf-8';

my $a1 = '%E8%A9%A6%E9%A8%93';
my $b0 = '試験';
my $b1 = uri_escape_utf8($b0); #内容は '%E8%A9%A6%E9%A8%93'
print("$a1\n");
print("$b1\n");
print("1\n") if($a1 eq $b1);    #当然のごとく1が出力される

my $a2 = uri_unescape($a1);
my $b2 = uri_unescape($b1);
print("1\n") if($a2 eq $b2);    #なぜか 1 が表示されない
print("$b2\n"); #こちらは '試験'
print("$a2\n"); #文字化け
exit;


use encoding 'utf-8' を取ったり use utf8; にしたりすると他所に
大影響が出てしまうため変更できません。

これ。本当にハマりましたよ。
いったい何がどうなっているのかさっぱりわかりませんでした。

※実際には CGI 上のパラメータが文字化けしてました。

上記の謎の動作ですが
$a1= encode_utf8($a1);
を呼び出すことで期待通りの動きをすることがわかりました。

さて、本番環境に対応しようと・・・
my $cgi = new CGI();
my $a2 = $chi->param('a2');
文字化けです。
CGI の sub new で取得するuri_encode されたパラメータに対して事前に
encode_utf8を実行しなければならないのに、POSTリクエストだから標準
入力を変更する術が見つかりません。

じゃあ、ってことで呼び出し側を GET にしましたら、なんの変更も加えず
文字化けしなくなりましたよ。
Perlモジュールのバージョンの影響かと思い、さんざん調査すること3日
こういうのって、あっけなく解決するもんなんですねぇ
あー眠たい。