Content display based on user preferences
You can accomplish the first by enabling PHP in modules, and making a check in the block configuration / Pages - using php you can check each block for the appropriate $user field and whether or not its set for that particular language.  You could also create a module to build each block programmatically, and then show/hide depending on the field value.

The second can be done with something like this:

Content Type
  * create a hidden field called language


using Rules set an event (After Saving New Content - ), event - set data value - node->language equal to user->language. This will assign a language to each node created
create a view with the relevant fields/information you want presented, and filter on current user:language - in this way each user who sees this view will only see the entries that match their own language settings