QA #309
未完了ユーザ情報として和名、英名を言語切り替えで登録表示させたい
0%
説明
現状、Active Directoryからユーザ情報を取得しているので和名の氏名しかないのですが、
これに付加情報として英名を登録しチケット表示に言語切り替えで表示切替をしたく思っています。
このようなことを実現しているようなパッチもしくは、プラグインをご存じないでしょうか?
https://redmine.ociotec.com/projects/localizable
のプラグインではそこまではできず。。。
奈良 裕記 さんが約7年前に更新
Redmineを海外の方と共用したい場合ですね。理解できます。
・コアの用語は表示/編集時のLocaleで切替
・内容は英語で書くとして
・カスタムフィールド名も、最初から英文にしておけば良いか。。
・名前も表示/編集時のLocaleで自動切換えしたい。
普段の名前も英文表記にすると、日本人の間の視認性に難があるし、今回はAD側データの制約がありますね。
関連個所
チケットの名前表示は下記箇所です。
helpers/application_helper.rb: def link_to_user(user, options={}) に手を入れることになると思いますが、具体的な処理が書けないのが残念です。
views/layouts/base.html.erb: <%= link_to_user(User.current, :format => :username) %>
views/layouts/base.html.erb: <%= content_tag('div', "#{l(:label_logged_as)} #{link_to_user(User.current, :format => :username)}".html_safe, :id => 'loggedas') if User.current.logged? %>
helpers/issues_helper.rb: content_tag('td', link_to_user(child.assigned_to), :class => 'assigned_to') +
views/issues/show.html.erb: rows.left l(:field_assigned_to), avatar(@issue.assigned_to, :size => "14").to_s.html_safe + (@issue.assigned_to ? link_to_user(@issue.assigned_to) : "-"), :class => 'assigned-to'
helpers/application_helper.rb: def link_to_user(user, options={})
Tamura Shinji さんが約7年前に更新
localeで切り替えるのがよくわからなかったので。。。
jqueryでやってるっぽい?
AD側によく見たらフルネームの英名があったので、ADから取得する情報を displayNameと英名フルネームのフィールドで取得して、
app/models/user.rbのフォーマットとして、カンマフォーマットは使わないのでカンマの代わりに "_"としてみました。
これで英名、和名のフルネーム表示となったので一旦はこれでいってみます。
Kawai takashi さんが約5年前に更新
View Customize Pluginで実現してみました。
//--------------------------------------------------
//パスのパターン:/issues
//挿入位置:全てのページのヘッダ
//種別:JavaScript
//--------------------------------------------------
$(function () {
//--------------------------------------------------
//多言語対応の共通処理
//--------------------------------------------------
var current_language = document.documentElement.lang.toLowerCase();
//key en ja
var dict_lib = [
['N1', 'Yoshikawa kunihiro', '吉川邦弘'],
['N2', 'Nakamura mitsuo', '中村 光男'],
['N3', 'Kawai takashi', '河合 隆'],
];
// input key => output text by current language
function getdict(key) {
result_text = key;
dict_lib.forEach(function(item, index){
if(item[0] == key) {
if(current_language == 'en') {
result_text = item[1];
} else if(current_language == 'ja') {
result_text = item[2];
}
}
});
return result_text;
}
function getdict_bylang(key, lang) {
result_text = key;
dict_lib.forEach(function(item, index){
if(item[0] == key) {
if(lang == 'en') {
result_text = item[1];
} else if(lang == 'ja') {
result_text = item[2];
}
}
});
return result_text;
}
function language_apply_text(element, key) {
var text_trans = getdict(key);
element.text(text_trans);
return true;
}
function language_apply_html(element, key) { //今回の処理では使用していません
var text_trans = getdict(key);
element.html(text_trans);
return true;
}
//--------------------------------------------------
//コンボ内容
//--------------------------------------------------
var changelang = function() {
language_apply_text($('#issue_assigned_to_id option[value=1]'), 'N1');
language_apply_text($('#issue_assigned_to_id option[value=2]'), 'N2');
language_apply_text($('#issue_assigned_to_id option[value=3]'), 'N3');
}
//--------------------------------------------------
//詳細表示
//--------------------------------------------------
if ($('div[class="assigned-to attribute"] > div.value a').length){
var val = $('div[class="assigned-to attribute"] > div.value a').attr("href").split("/").pop();
var valpos = $('div[class="assigned-to attribute"] > div.value a');
switch(val) {
case '1' : language_apply_text($(valpos), 'N1'); break;
case '2' : language_apply_text($(valpos), 'N2'); break;
case '3' : language_apply_text($(valpos), 'N3'); break;
}
}
//--------------------------------------------------
//チケットグリッド
//--------------------------------------------------
$('table.issues td[class="assigned_to"] a').each(function () {
var val = $(this).attr("href").split("/").pop();
var elem = $(this);
if (val == "1") {
language_apply_text(elem, 'N1');
} else if (val == "2") {
language_apply_text(elem, 'N2');
} else if (val == "3") {
language_apply_text(elem, 'N3');
} else {
// do nothing
}
})
//--------------------------------------------------
// 初期表示時の設定処理呼び出し
changelang();
$(document).ajaxComplete(function(){
// トラッカー変更時の設定処理呼び出し
changelang();
});
})
Redmineを海外の方と共用しているので、コンボボックスのアイテム・テキスト表示・チケット一覧グリッド・エラーメッセージなどを、この方法で多言語化して使用しています。
ご紹介されている既存のプラグインだと、確かに一部にしか対応できないですよね。
登録内容に変更があるとスクリプトの修正が必要ですが、ほとんどコピペだけで済みます。また、複数言語の表示内容を登録する必要がありますが、これはプラグインでもredmineの.ymlファイルでも手間は同じだと思いますので。
Okamoto Keiji さんが4年以上前に更新
Redmineを海外の方と共用したい場合ですね。理解できます。 ・コアの用語は表示/編集時のLocaleで切替 ・内容は英語で書くとして ・カスタムフィールド名も、最初から英文にしておけば良いか。。
こちらのチケットにたどり着いたので質問させてください。。。
同様に海外のグループ会社とRedmineを共用しています。
上記にある「Localeに応じてカスタムフィールド名を英語表示に切り替える」をやりたいのですが
View Customizeを利用しての実現は難しいでしょうか。
いい方法があればご教示いただきたく。
奈良 裕記 さんが4年以上前に更新
ViewCustomizeで対応は可能だろうと思います。
上の Kawai takashi さんのスクリプトが参考になるでしょう。
実際に表示変更したい用語は限られるでしょうから、力業でも可能でしょうし。
別の方法として、message_customize plugin(Redmineの用語カスタマイズプラグイン)にも要望出しています。
こちらも参考になると思います。
Change custom field display names in multilingual environment
https://github.com/ishikawa999/redmine_message_customize/issues/2
Okamoto Keiji さんが4年以上前に更新
早速の返信ありがとうございます!
いただいた情報参考にさせていただきます。
ただ、コメントしてから気づいたのですが、質問者の方が最初に示されていた
以下のプラグインで実現できてしまうかもしれないと思ってます。。。