2018年7月10日 星期二

ASP.NET MVC Multi Language: 多國語言 功能

1. Establish Resource directory, add new item > resource files. (.resx) 




Note: Add the GlobalRes.resx file with all the content that you need to translate. Here I have a English version as GlobalRes.resx and Chinese version as GlobalRes.zh-TW.resx. Notice that you need to feel the ISO country code for the postfix data name. 

  1. Set type to Strings 
  2. Access Modifier as Public 
  3. In properties, set Build Action to Embedded Resource.


2. Controller for language change. (And view for Index())

using System.Globalization;
using System.Threading;
using System.Web;
using System.Web.Mvc;

namespace IrsaWebStore.Controllers
{
public class LanguageController : Controller
{
// GET: Language
public ActionResult Index()
{
return View();
}

public ActionResult Change(string LanguageAbbreviation)
{
if(LanguageAbbreviation != null)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(LanguageAbbreviation);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguageAbbreviation);
}

HttpCookie cookie = new HttpCookie("Language")
{
Value = LanguageAbbreviation
};
Response.Cookies.Add(cookie);

return View("Index");
}
}
}




Note: Add new controller in Controller folder.

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@IrsaWebStore.Resources.GlobalRes.Language</h2>

<ul>
<li>@Html.ActionLink(@IrsaWebStore.Resources.GlobalRes.English, "Change", "Language", new { LanguageAbbreviation = "en" }, null)</li>
<li>@Html.ActionLink(@IrsaWebStore.Resources.GlobalRes.Chinese_tw, "Change", "Language", new { LanguageAbbreviation = "zh-TW" }, null)</li>
</ul>

3. In Global.asax

protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies["Language"];

if (cookie != null && cookie.Value != null)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
}
else
{
HttpContext.Current.Response.AppendCookie(new HttpCookie("Language"));
HttpContext.Current.Request.Cookies["Language"].Value = "zh-TW";
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-TW");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-TW");
}

}

Note: Here I set zh-TW as default cookie value. Otherwise the default language would be the .resx file without country code. (e.g. GlobalRes.resx, instead of GlobalRes.zh-TW.resx)

4. Web.config settings.

<system.web>

<!--Globalization-->
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />
<!--/Globalization-->

<!-- ... -->
<!-- ... -->

</system.web>


5. Route rules (App_start > routeConfig.cs)

routes.MapRoute("Language", "Language/{action}/{id}",
new { controller = "Language", action = "Index", id = UrlParameter.Optional }, new[] { "IrsaWebStore.Controllers" });


6. Modify Views (View > Shared >  _Layout.cshtml as example)

<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
@Html.Action("PagesMenuPartial", "Pages")
@if (Request.IsAuthenticated)
{
<li><a href="/account/logout">@IrsaWebStore.Resources.GlobalRes.Logout</a></li>
}
else
{
if (ViewBag.Title == "Login")
{
<li class="active"><a href="/account/login">@IrsaWebStore.Resources.GlobalRes.Login</a></li>
}
else
{
<li><a href="/account/login">@IrsaWebStore.Resources.GlobalRes.Login</a></li>
}

if (ViewBag.Title == "CreateAccount")
{
<li class="active"><a href="/account/create-account">@IrsaWebStore.Resources.GlobalRes.Create_Account</a></li>
}
else
{
<li><a href="/account/create-account">@IrsaWebStore.Resources.GlobalRes.Create_Account</a></li>
}
}

<!-- ... -->


2018年6月24日 星期日

Adobe Reader: Night mode eye protection Adobe PDF Reader 護眼模式

If you're looking for a night-mode / dark theme for you Adobe Reader, there's no such feature for your document content yet. But you can set the background color to ease your eyes.

(Adobe Reader 目前沒有文件內的護眼模式 / 夜間模式,所以我們可以透過更改文件背景色來讓閱讀過程更為舒適。)


Steps:

1. Edit > Preference > Accessibility > Document Colors Options
2. Custom color: Page Background
3. My Color setting:

2018年6月13日 星期三

Git: Show only changed files in specific commit history 只顯示變更之檔案 不顯示內容

$ git diff-tree --no-commit-id --name-only -r <commit hash>

  • The ---no-commit-id suppresses the commit ID output.
  • The ---pretty argument specifies an empty format string to avoid the cruft at the beginning.
  • The ---name-only argument shows only the file names that were affected (Thanks Hank).
  • The --r argument is to recurse into sub-trees

credit: author

2018年6月7日 星期四

Git: Stop tracking specific file and git ignore it 停止追蹤特定檔案並且永久忽略追蹤

Stop tracking the file: 
git rm --cached <file dir>
And then edit .gitignore to add the file to ignore

Visual Studio 2017 Git ignore template VS 2017 git ignore 範本

## Ignore Visual Studio temporary files, build results, and

## files generated by popular Visual Studio add-ons.

##

## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore



# User-specific files

*.suo

*.user

*.userosscache

*.sln.docstates



# User-specific files (MonoDevelop/Xamarin Studio)

*.userprefs



# Build results

[Dd]ebug/

[Dd]ebugPublic/

[Rr]elease/

[Rr]eleases/

x64/

x86/

bld/

[Bb]in/

[Oo]bj/

[Ll]og/



# Visual Studio 2015/2017 cache/options directory

.vs/

# Uncomment if you have tasks that create the project's static files in wwwroot

#wwwroot/



# Visual Studio 2017 auto generated files

Generated\ Files/



# MSTest test Results

[Tt]est[Rr]esult*/

[Bb]uild[Ll]og.*



# NUNIT

*.VisualState.xml

TestResult.xml



# Build Results of an ATL Project

[Dd]ebugPS/

[Rr]eleasePS/

dlldata.c



# Benchmark Results

BenchmarkDotNet.Artifacts/



# .NET Core

project.lock.json

project.fragment.lock.json

artifacts/



# StyleCop

StyleCopReport.xml



# Files built by Visual Studio

*_i.c

*_p.c

*_i.h

*.ilk

*.meta

*.obj

*.iobj

*.pch

*.pdb

*.ipdb

*.pgc

*.pgd

*.rsp

*.sbr

*.tlb

*.tli

*.tlh

*.tmp

*.tmp_proj

*.log

*.vspscc

*.vssscc

.builds

*.pidb

*.svclog

*.scc



# Chutzpah Test files

_Chutzpah*



# Visual C++ cache files

ipch/

*.aps

*.ncb

*.opendb

*.opensdf

*.sdf

*.cachefile

*.VC.db

*.VC.VC.opendb



# Visual Studio profiler

*.psess

*.vsp

*.vspx

*.sap



# Visual Studio Trace Files

*.e2e



# TFS 2012 Local Workspace

$tf/



# Guidance Automation Toolkit

*.gpState



# ReSharper is a .NET coding add-in

_ReSharper*/

*.[Rr]e[Ss]harper

*.DotSettings.user



# JustCode is a .NET coding add-in

.JustCode



# TeamCity is a build add-in

_TeamCity*



# DotCover is a Code Coverage Tool

*.dotCover



# AxoCover is a Code Coverage Tool

.axoCover/*

!.axoCover/settings.json



# Visual Studio code coverage results

*.coverage

*.coveragexml



# NCrunch

_NCrunch_*

.*crunch*.local.xml

nCrunchTemp_*



# MightyMoose

*.mm.*

AutoTest.Net/



# Web workbench (sass)

.sass-cache/



# Installshield output folder

[Ee]xpress/



# DocProject is a documentation generator add-in

DocProject/buildhelp/

DocProject/Help/*.HxT

DocProject/Help/*.HxC

DocProject/Help/*.hhc

DocProject/Help/*.hhk

DocProject/Help/*.hhp

DocProject/Help/Html2

DocProject/Help/html



# Click-Once directory

publish/



# Publish Web Output

*.[Pp]ublish.xml

*.azurePubxml

# Note: Comment the next line if you want to checkin your web deploy settings,

# but database connection strings (with potential passwords) will be unencrypted

*.pubxml

*.publishproj



# Microsoft Azure Web App publish settings. Comment the next line if you want to

# checkin your Azure Web App publish settings, but sensitive information contained

# in these scripts will be unencrypted

PublishScripts/



# NuGet Packages

*.nupkg

# The packages folder can be ignored because of Package Restore

**/[Pp]ackages/*

# except build/, which is used as an MSBuild target.

!**/[Pp]ackages/build/

# Uncomment if necessary however generally it will be regenerated when needed

#!**/[Pp]ackages/repositories.config

# NuGet v3's project.json files produces more ignorable files

*.nuget.props

*.nuget.targets



# Microsoft Azure Build Output

csx/

*.build.csdef



# Microsoft Azure Emulator

ecf/

rcf/



# Windows Store app package directories and files

AppPackages/

BundleArtifacts/

Package.StoreAssociation.xml

_pkginfo.txt

*.appx



# Visual Studio cache files

# files ending in .cache can be ignored

*.[Cc]ache

# but keep track of directories ending in .cache

!*.[Cc]ache/



# Others

ClientBin/

~$*

*~

*.dbmdl

*.dbproj.schemaview

*.jfm

*.pfx

*.publishsettings

orleans.codegen.cs



# Including strong name files can present a security risk

# (https://github.com/github/gitignore/pull/2483#issue-259490424)

#*.snk



# Since there are multiple workflows, uncomment next line to ignore bower_components

# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)

#bower_components/



# RIA/Silverlight projects

Generated_Code/



# Backup & report files from converting an old project file

# to a newer Visual Studio version. Backup files are not needed,

# because we have git ;-)

_UpgradeReport_Files/

Backup*/

UpgradeLog*.XML

UpgradeLog*.htm

ServiceFabricBackup/

*.rptproj.bak



# SQL Server files

*.mdf

*.ldf

*.ndf



# Business Intelligence projects

*.rdl.data

*.bim.layout

*.bim_*.settings

*.rptproj.rsuser



# Microsoft Fakes

FakesAssemblies/



# GhostDoc plugin setting file

*.GhostDoc.xml



# Node.js Tools for Visual Studio

.ntvs_analysis.dat

node_modules/



# Visual Studio 6 build log

*.plg



# Visual Studio 6 workspace options file

*.opt



# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)

*.vbw



# Visual Studio LightSwitch build output

**/*.HTMLClient/GeneratedArtifacts

**/*.DesktopClient/GeneratedArtifacts

**/*.DesktopClient/ModelManifest.xml

**/*.Server/GeneratedArtifacts

**/*.Server/ModelManifest.xml

_Pvt_Extensions



# Paket dependency manager

.paket/paket.exe

paket-files/



# FAKE - F# Make

.fake/



# JetBrains Rider

.idea/

*.sln.iml



# CodeRush

.cr/



# Python Tools for Visual Studio (PTVS)

__pycache__/

*.pyc



# Cake - Uncomment if you are using it

# tools/**

# !tools/packages.config



# Tabs Studio

*.tss



# Telerik's JustMock configuration file

*.jmconfig



# BizTalk build output

*.btp.cs

*.btm.cs

*.odx.cs

*.xsd.cs



# OpenCover UI analysis results

OpenCover/



# Azure Stream Analytics local run output

ASALocalRun/



# MSBuild Binary and Structured Log

*.binlog



# NVidia Nsight GPU debugger configuration file

*.nvuser



# MFractors (Xamarin productivity tool) working folder

.mfractor/

Git: Revert single file to certain commit 將單一檔案還原回特定提交

Check the specific diff before checkout 檢查版本差異:
git diff <commit hash> <filename>

Then do the revert work 還原特定檔案成舊版本:

git checkout <commit hash> -- <filename>

2018年4月19日 星期四

Sublime Text 3 Customization: New line with semicolon at end (Hotkey) 換行自動加分號 快速鍵

Steps: 


  1. Place the cursor at the middle of a line of code. e.g. ("Hello") and put cursor in front of 'o'.
  2. Go to [Tools] >  [Record a Macro]
  3. Press "End" key on keyboard, then type ";" and press Enter.
    (If you want the cursor to stay at the end without breaking to new line then you don't have to press Enter)
  4. Go to [Tools] > [Stop Recording Macro]
  5. Test your macro by [Tools] > [Playback Macro] 
  6. If it performs correctly, [Tools] > [Save Macro] (ex: endOfLine.sublime-macro)
  7. Create a shortcut by adding this between the square brackets in your in your [Preferences] > [Key Bindings] - User file:
    {
    "keys": ["alt+enter"], "command": "run_macro_file", "args": {"file": "Packages/User/endOfLine.sublime-macro"} 
    }
  8. Now, every time you hit Alt + Enter, it will place the semicolon at the end of current line and move the cursor to the next line.


Reference: drdiv

2018年4月7日 星期六

spaceship plan: blue print

Contents:

1. Podcast: For English speaking practice, aspect practice and open up discuss.
2. Photos / designs: Self works.
3. Blog: About life, coding and career.
4. And the development of this web itself.

Tech:

1. By ASP.NET  MVC (to enhance work)
2. Front-end React or Angular